【问题标题】:OpenGL GLFW: undefined reference to 'glfwInit'OpenGL GLFW:对“glfwInit”的未定义引用
【发布时间】:2017-09-12 17:51:52
【问题描述】:

我知道这个问题已经在 StackOverflow 和其他网站上被问过很多次;在查看了这些资源后,我仍然不知所措。

我只是想让 OpenGL 使用 GLFW 在我的机器(Windows 7 64 位)上运行。

我遇到的问题与许多其他人遇到的问题相同:我收到单一链接器错误:“未定义对 '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 - 包含文件夹)

我试过了:
* 使用 GLFW 的 64 位版本
* 使用 IDE(Eclipse、VS)
* GLFW Undefined References中的建议
* What is an undefined reference/unresolved external symbol error and how do I fix it? 中的建议(交换链接参数顺序)
* 建议在OpenGL with Eclipse CDT + MinGW + GLEW + GLFW: Undefined References
* 尝试使用 CMake 自己编译库,但没有看到在此过程中创建任何 .a、.lib 或 .dll 文件。

如果其他信息有帮助,请告诉我。

【问题讨论】:

  • 我的建议是:不要使用部分路径(-L./lib),而是使用完整路径
  • @Amadeus:感谢您的建议。试一试,但似乎没有任何改变(似乎链接器能够正确定位所有库 - 如果无法定位 glfw3,则会给出不同的错误)。

标签: c++ opengl mingw glfw


【解决方案1】:

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

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

另外,添加

#define GLFW_DLL

如果与 DLL 链接,则在 include 语句上方。

【讨论】:

    【解决方案2】:
    g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl
    

    应该有效

    【讨论】:

    • 我为动态链接添加了-ldl
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      相关资源
      最近更新 更多