我正在尝试使用 minGW 在 Windows 上开发带有 GLEW 和 GLFW 的 openGL 应用程序。在当前目录 project/
中,我有目录 src/
、bin/
和 glfw-3.0.4.bin .WIN64/
。我的文件中有 test.cpp
、glew.h
、glew.c
和 wglew.h
src/
目录。
目录./glfw-3.0.4.bin.WIN64/include/
包含GLFW/glfw3.h
头文件。
目录./glfw-3.0.4.bin.WIN64/lib-mingw/
包含glfw3.dll
、glfw3dll.a
和libglfw3.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/