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

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

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

附加信息:

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

我试过:

c++ opengl mingw glfw
5个回答
12
投票

终于在 许多 小时后解决了我的问题。

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

另外,补充

#define GLFW_DLL

如果与 DLL 链接,则位于 include 语句之上。


6
投票
g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl

应该工作


2
投票

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

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

gcc --version
命令。

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


1
投票

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


0
投票

我必须将 glfw 添加到 目标链接库

target_link_libraries( 可执行文件名 glfw )

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