我只是想让 OpenGL 使用 GLFW 在我的机器(Windows 7 64 位)上工作。
我收到单一链接器错误:
undefined reference to 'glfwInit'.
我尝试编译的代码是最简单的代码(在文件 Test.cpp 中)。
#include <iostream>
#include <GLFW/glfw3.h>
int main()
{
std::cout << "hello world" << std::endl;
glfwInit();
return 0;
}
我正在使用一个简单的 Makefile 来尝试编译:
Test: Test.o
g++ -o Test -L./lib -lglew32 -lglfw3 -lopengl32 -lglu32 -lgdi32 Test.o
Test.o: Test.cpp
g++ -I./include -c Test.cpp
附加信息:
我试过:
终于在 许多 小时后解决了我的问题。
将 libglfw3.a 文件留在与 glfw3.dll 相同的目录中(如果尝试动态链接)将使链接器感到困惑。如果动态链接,请将其删除 - 您只需要 dll 和 /include 文件夹。
另外,补充
#define GLFW_DLL
如果与 DLL 链接,则位于 include 语句之上。
g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl
应该工作
如果你正确地将所有库与 GCC 链接并且没有出现错误,但它只是没有定义像“glfwInit()”这样的函数,请检查你的 MinGW 版本。如果您使用 86x 版本的 MinGW,那么库也必须是 86x。 64x 可能也是如此,但我还没有检查。
要检查 MinGW 的版本,请在命令行中使用
gcc --version
命令。
我一整天都在尝试解决这个问题,这就是原因。 真的希望我能帮助别人。
我遇到了同样的问题,我在 glfw 论坛上找到了答案。
https://discourse.glfw.org/t/linking-compiling-glfw-with-mingw/1969/4
我在 MinGW g++ 中使用静态“.a”库。在您的情况下,您决定使用共享的“.dll”库,但对于那些走静态路线的人来说,这可能仍然有帮助。事实证明,就我而言,这是我的 makefile 的问题。当链接器查找定义的引用时,它需要在引用它们的文件之后链接具有定义的文件。
例如,这行不通:
g++ -o main.exe -Ipath/to/included/files -Lpath/to/libraries -lglfw3 -lgdi32 main.cpp
它最后到达 main.cpp,在 main.cpp 之后没有任何内容来定义它使用的 glfw 函数。另一方面,这有效:
g++ -o main.exe -Ipath/to/included/files -Lpath/to/libraries main.cpp -lglfw3 -lgdi32
链接器到达 main.cpp 并开始查找这些引用,然后到达定义它们的 glfw3 库。没有错误。
如果您尝试将 -lgdi32 放在 -lglfw3 之前,您会遇到类似的错误。 glfw3 库引用了 gdi32 库,因此它需要在链接器前面找到它们的定义。
我必须将 glfw 添加到 目标链接库。
target_link_libraries( 可执行文件名 glfw )