编辑:我已经解决了这个问题,并在下面写了一个详细的答案。
我刚刚尝试从MSVC 10的Express版本切换到Win7上的Eclipse CDT,然后在配置时遇到了以下简单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。
glfwMakeContextCurrent(w);
后需要调用glewInit()
。 - vallentin