GLFW在Windows8上使用Eclipse+MinGW的未定义引用

GLFW Undefined References using Eclipse + MinGW on Windows 8

本文关键字:Eclipse+MinGW 未定义 引用 Windows8 GLFW      更新时间:2023-10-16

我正在尝试设置GLFW。我在Windows 8.1 上的Eclipse CDT中工作

我已经下载了GLFW二进制文件,并尝试在此处运行示例代码http://www.glfw.org/documentation.html

到目前为止,我已经包含了glfw标头,并且正在(静态地)与glfw3、opengl32和gdi32链接(按顺序)。

编译器正在运行以下命令

g++ "-IC:\Libraries\GLFW3\include" -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\main.cpp" 
g++ "-LC:\Libraries\GLFW3\lib-mingw" -o HelloGLFW3.exe main.o -lglfw3 -lopengl32 -lgdi32

我得到每个GLFW函数的错误"Undefined reference to…"。

我不明白我做错了什么。我在谷歌上搜索过,在Stack Overflow上也有一些类似的问题,但都没有解决问题。最常见的建议是重新排序链接顺序,但据我所知,顺序是正确的,我试过以防万一,但没有什么不同。

有人能提供如何正确链接的指导吗?

编辑:我在32位和64位glfw二进制文件中都尝试过(我最初的尝试是在64位二进制文件中,但谷歌表示,链接32位和32位程序可能会有问题——据我所知,我的MinGW版本只能产生32位输出)。这些是产生的错误:

64位二进制文件:

undefined reference to `glfwCreateWindow'   main.cpp    /HelloGLFW3 line 12 C/C++ Problem
undefined reference to `glfwInit'
undefined reference to `glfwMakeContextCurrent'
undefined reference to `glfwPollEvents'
undefined reference to `glfwSwapBuffers'
undefined reference to `glfwTerminate'
undefined reference to `glfwTerminate'
undefined reference to `glfwWindowShouldClose'

32位二进制文件:

undefined reference to `_imp__CreateDCW@16' HelloGLFW3      line 0, external location: C:LibrariesGLFW3i386lib-mingwlibglfw3.a(win32_gamma.c.obj):win32_gamma.c    C/C++ Problem
undefined reference to `_imp__CreateDCW@16'
undefined reference to `_imp__DeleteDC@4'
undefined reference to `_imp__DeleteDC@4'
undefined reference to `_imp__DescribePixelFormat@16'
undefined reference to `_imp__GetDeviceCaps@8'
undefined reference to `_imp__GetDeviceGammaRamp@8'
undefined reference to `_imp__SetDeviceGammaRamp@8'
undefined reference to `_imp__SetPixelFormat@12'
undefined reference to `_imp__SwapBuffers@4'

GLFW提供64位和32位二进制版本。编译程序时,您可以生成64位输出或32位输出。您的程序必须与您正在使用的库兼容。

这意味着,仅仅因为你有一台64位计算机并不意味着你需要64位二进制文件。此外,检查编译器是否输出了您认为它正在输出的内容也是一个好主意。