Изменить: я тем временем разобрался в этом и написал подробный ответ ниже.
Я просто попытался переключиться с экспресс-версии MSVC 10 на Eclipse CDT в Win7, и во время настройки я столкнулся с проблемой со следующим простым кодом OpenGL (который отлично работает в Visual Studio):
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main()
{
GLFWwindow* w;
if (!glfwInit())
return -1;
w = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!w)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(w);
glewExperimental = true;
if (glewInit() != GLEW_OK)
{
return -1;
}
while (!glfwWindowShouldClose(w))
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfwSwapBuffers(w);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
В Visual Studio я включаю пути к библиотекам для GLFW и GLEW и связываю (в дополнение к тому, что VS делает встроенный) opengl32.lib, glew32s.lib, glfw3.lib в этом порядке.
Теперь, если я сделаю то же самое в Eclipse CDT, я не смогу заставить его работать. Возникают следующие ошибки:
Info: Internal Builder is used for build
g++ "-LD:\\lib\\cpp\\glfw-3.0.1.bin.WIN32\\lib-mingw" "-LD:\\lib\\cpp\\glew-1.10.0binaries\\lib\\Release\\Win32" -o glfwcheck.exe main.o -lopengl32 -lglew32s -lglfw3
Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
D:\lib\cpp\glew-1.10.0binaries\lib\Release\Win32/glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.text[__glewInit_GL_VERSION_1_2]+0x4): undefined reference to `_imp__wglGetProcAddress@4'
D:\lib\cpp\glew-1.10.0binaries\lib\Release\Win32/glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.text[__glewInit_GL_VERSION_1_3]+0x4): undefined reference to `_imp__wglGetProcAddress@4'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: D:\lib\cpp\glew-1.10.0binaries\lib\Release\Win32/glew32s.lib(tmp/glew_static/Release/Win32/glew.obj): bad reloc address 0x4 in section `.text[__glewInit_GL_VERSION_1_3]'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
Конечно, я пытался изменить порядок трех библиотек, но это только злило. (Кстати: мне кажется странным, что я не могу воспроизвести эти ошибки выше, так что они единственные, когда я переставляю библиотеки в исходный порядок. Я остаюсь на 20+ ошибках, пока не удалю ВСЕ библиотеки , постройте и добавьте их снова.)
Покопавшись и просмотрев сообщения на форуме, я подумал, что, возможно, это проблема с двоичными файлами GLEW, и скомпилировал их самостоятельно с помощью MinGW. Только на этот раз я получаю все ошибки типа «не найдено». Я не знаю, как я могу статически связать с моим самокомпилированным GLEW, поскольку теперь glew32s.lib больше нет, а есть только libglew32.a и libglew32mx.a. Динамическое связывание с glew32 и помещение dll в папку моего проекта тоже не сработало.
Мне кажется, что я делаю что-то очень неправильное здесь, в Eclipse, или просто забываю некоторые дополнительные библиотеки (хотя однажды я попытался поместить туда все те, которые использует VS, и он по-прежнему делал то же самое).
Можете ли вы мне помочь? :) В противном случае, думаю, мне пришлось бы остаться с VS или перейти на Linux + make.
glewInit()
после того, как позвонитеglfwMakeContextCurrent(w);
- person vallentin   schedule 30.12.2013