opengl - 在 MinGW 上链接 GLFW 时出现未定义的引用错误

标签 opengl mingw glfw

我正在尝试使用 minGW 在 Windows 上开发带有 GLEW 和 GLFW 的 openGL 应用程序。在当前目录 project/ 中,我有目录 src/bin/glfw-3.0.4.bin .WIN64/。我的文件中有 test.cppglew.hglew.cwglew.h src/ 目录。

目录./glfw-3.0.4.bin.WIN64/include/包含GLFW/glfw3.h头文件。

目录./glfw-3.0.4.bin.WIN64/lib-mingw/包含glfw3.dllglfw3dll.alibglfw3.a

我的主文件,test.cpp包含,

#include "glew.h"
#include "GLFW/glfw3.h"

#include <stdio.h>

int main(int argc, char** argv) {
    printf("Hello, World!\n");

    glewInit();
    glfwInit();
}

我正在通过运行从 project/ 目录编译程序(为了便于阅读,分为两行)

gcc -DGLEW_STATIC -DGLFW_DLL -o ./bin/test ./src/*.cpp ./src/glew.c 
-I ./glfw-3.0.4.bin.WIN64/include/ -L ./glfw-3.0.4.bin.WIN64/lib-mingw/ -lglfw3 -lopengl32

我收到以下错误:

undefined reference to `_imp_glfwInit'

我认为问题与我错误地链接 GLFW 库有关。据我了解,包括编译器选项 -lglfw3 将告诉 gcc 链接 ./glfw-3.0.4.bin.WIN64/lib-mingw/glfw3.dll,其中包含 glfwInit() 的定义。

我研究了与我类似的其他问题的解决方案,他们建议将 dll 文件复制到源/二进制目录并更改 -l 选项的顺序,但似乎都没有解决该问题我。

最佳答案

你的问题是 gcc 遵循严格的库命名约定。它尝试查找 glfw3.dll.a,但没有找到(因为它被命名为 glfw3dll.a - 简单的重命名即可解决您的问题)。

下一步它会查找libglfw3.a,并成功 - 但它是一个静态库,而引用在头文件中声明为动态(棘手的Windows DECLSPECs...这个问题不存在例如在 Linux 上)。所以,它找不到 _imp__glfwInit,因为在静态库中它只被称为 glfwInit,所以你会得到一个错误。

删除 libglfw3.a 也是选项之一 - 在这种情况下,gcc 会进一步查找并最终找到 glfw3.dll 并使用它。

关于opengl - 在 MinGW 上链接 GLFW 时出现未定义的引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623087/

相关文章:

windows - 将较新的 OpenGL 与 MinGW 结合使用

c - 以编程方式或使用 list (MinGW) 将 "Override high DPI scaling"设置为 "System (Enhanced)"

c++ - 为什么我在屏幕上显示了一半的三角形?

go - 在 mac 上构建 google/gxui 示例错误

c - 使用Mingw将一堆C文件编译成DLL的步骤

c++ - 片段着色器在彼此之上绘制面孔,即使它不应该

wpf - 如何在 WPF 中创建偏离中心的 PerspectiveCamera?

c++ - opengl 中的着色器应该做多少工作?

c++ - 为什么 Doom3 会切换列主矩阵和行主矩阵?

c++ tga 解析 incorrect_color/distortion with some resolutions