GLFW:对“glfwInit”的未定义引用

问题描述 投票:0回答:5

我只是想通过 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

附加信息:

  • 使用g++编译(MinGW32)
  • lib文件夹包含glfw3.dll、libglfw3.a和libglfw3dll.a(从GLFW网站下载的Win32版本-Windows预编译库)
  • include 文件夹包含一个名为 GLFW 的文件夹,其中包含 glfw3.h 和 glfw3native.h(来自下载的 GLFW - include 文件夹)

我已经尝试过:

c++ opengl mingw glfw undefined-reference
5个回答
12
投票
终于在

很多几个小时后解决了我的问题。

将 libglfw3.a 文件保留在与 glfw3.dll 相同的目录中(如果尝试动态链接)会使链接器感到困惑。如果动态链接则删除它 - 您需要的只是 dll 和 /include 文件夹。

另外补充一下

#define GLFW_DLL

如果与 DLL 链接,则位于包含语句上方。


5
投票
g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl
应该可以工作


2
投票
如果您正确链接所有库与 GCC 并且没有出现错误,但它只是没有定义像“glfwInit()”这样的函数,请检查您拥有的 MinGW 版本。如果您使用 86x 版本的 MinGW,则库也必须是 86x。 64x 可能也是如此,但我还没有检查。

要检查 MinGW 的版本,请在命令行中使用

gcc --version

 命令。

我一整天都在试图解决这个问题,这就是原因。 真的希望我能帮助别人。


2
投票
我也遇到了同样的问题,我在 glfw 论坛上找到了答案。

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 库,因此链接器需要在前面找到它们的定义。


0
投票
我必须将 glfw 添加到

目标链接库

目标链接库( 可执行文件名 GLFW )

© www.soinside.com 2019 - 2024. All rights reserved.