Edit:与此同时,我已经弄清楚了这一点,并在下面写了详细的答案。
我刚刚尝试在 Win7 上从 Express 版本的 MSVC 10 切换到 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。