我只是想通过 GLFW 让 OpenGL 在我的机器(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 链接,则位于包含语句上方。
g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl
应该可以工作
要检查 MinGW 的版本,请在命令行中使用
gcc --version
命令。我一整天都在试图解决这个问题,这就是原因。 真的希望我能帮助别人。
https://discourse.glfw.org/t/linking-compiling-glfw-with-mingw/1969/4
我将静态“.a”库与 MinGW g++ 一起使用。就您而言,您决定使用共享“.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 )