2014-10-21 5 views
1

Я использую Mac OS X 10.9.5, полностью обновленный с XCode версии 6.0.1. Я также установил утилиты командной строки, которые необходимо установить после установки XCode. Я использую GLFW и GLEW в своих библиотеках openGL. GLEW был установлен вручную, когда GLFW был установлен с Macports.Скомпилировать программу OpenGL в Mac Terminal

Я хочу сделать кодирование без XCode, поскольку я делаю это в Windows (с MingW) и Linux. У меня есть googled, как скомпилировать программу, а также искать в stackoverflow.

Так, в настоящее время команда компиляции выглядит следующим образом (Это C++ программе)

g++ -framework Cocoa -framework OpenGL -framework CoreFoundation -framework CoreVideo -framework IOKit -L/usr/lib -L/usr/local/lib -I/usr/include/GLFW -I/usr/local/include/GL main.cpp -o main 

Я продолжаю получать следующее сообщение об ошибке:

Undefined symbols for architecture x86_64: 
"_glfwCreateWindow", referenced from: 
    _main in main-ba7a57.o 
"_glfwInit", referenced from: 
    _main in main-ba7a57.o 
"_glfwMakeContextCurrent", referenced from: 
    _main in main-ba7a57.o 
"_glfwTerminate", referenced from: 
    _main in main-ba7a57.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Программа является:

#define GLEW_STATIC 
#include <glew.h> 
#include <glfw3.h> 
#include <iostream> 

using namespace std; 

int main(int argc, char* argv[]) { 

GLFWwindow* window; 
if(!glfwInit()) exit(EXIT_FAILURE); 
window = glfwCreateWindow(1024, 768, "glfw", NULL, NULL); 
if(!window) { 
    glfwTerminate(); 
    exit(EXIT_FAILURE); 
} 
glfwMakeContextCurrent(window); 

const GLubyte* version = glGetString(GL_VERSION); 
cout << "OpenGL version: " << version << endl; 
glfwTerminate(); 
return 0; 
} 
+1

Вы не связываетесь с glfw libs, есть только новые каталоги ссылок, но нет libs. –

+0

Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) –

+0

В GLFW libs сообщается с помощью -L/usr/local/lib. Все libs указываются -L. – rathorsunpreet

ответ

0

Это только предположение, но попробуйте добавить `-lglfw 'в конец вашей командной строки. Это говорит g ++ для компиляции с libglfw.

0

Тот факт, что ошибка говорит, что Undefined symbols for architecture x86_64 заставляет меня думать, что, возможно, версии установленных вами библиотек были созданы для целевых 64-битных архитектур. Помните, что при выборе библиотек для установки вы должны выбирать 32-битные или 64-разрядные версии на основе тех архитектур, которые вы планируете использовать, а не той архитектуры, которую использует ваша машина разработки.

См. this other question для справки.

+0

Хорошо, но тогда g ++ может быть сказано использовать определенную архитектуру при компиляции. Как ты это делаешь? Если вы скажете -arch i386 или -arch x86_64, я использовал его и все еще получил ту же ошибку. – rathorsunpreet

+0

@rathorsunpreet Я имел в виду, что проблема может быть связана с установленными вами библиотеками, а не с вашим собственным кодом. Переустановите библиотеки GLFW и GLEW, чтобы убедиться, что вы устанавливаете 32-битные версии. –

Смежные вопросы