【发布时间】:2026-02-12 15:05:01
【问题描述】:
我正在尝试设置 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 函数,我都收到错误“未定义的引用 ...”。
我不知道我做错了什么。我已经进行了谷歌搜索,并且在 Stack Overflow 上提出了一些类似的问题,但没有一个能解决问题。最常见的建议是重新排序链接顺序,但据我所知顺序是正确的,我尝试过以防万一,但没有任何区别。
谁能提供有关如何正确链接的说明?
编辑:我已经尝试使用 32 位和 64 位 glfw 二进制文件(我最初的尝试是使用 64 位二进制文件,但 Google 表示尝试链接 32 位和 64 位程序可能会出现问题 - 从我可以告诉我的 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:\Libraries\GLFW3\i386\lib-mingw\libglfw3.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'
【问题讨论】:
-
我假设您确实将下载的二进制文件放入您的
lib-mingw文件夹,对吧?你到底下载了哪个包? -
我下载了 64 位 Windows 二进制文件。它带有包含文件和用于 mingw 和 msvc 编译器的库;所以是的,这些库在 lib-mingw 文件夹中。
-
好的,我也下载了它们,看看结构。能否请您发布一条“未解析的引用”错误消息,以便我可以查看他尝试解析哪种符号?
-
嗯,刚刚重新安装了 MinGW,并使用您发布的命令行编写了调用
glfwInit()和glfwCreateWindow()的测试代码。工作正常。您是否尝试过删除 *.a 文件并链接到 DLL? -
我是个白痴,当我切换到 GLFW 的 32 位二进制文件时,我不小心删除了 -lgdi32 标签,这就是导致链接错误的原因。最初的问题是我使用的是 64 位 GLFW 库,而 GNU 编译器正在生成我的程序的 32 位输出。感谢您的帮助。
标签: c++ eclipse windows-8 glfw