我正在尝试使用 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();
}
Run Code Online (Sandbox Code Playgroud)
我正在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
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
undefined reference to `_imp_glfwInit'
Run Code Online (Sandbox Code Playgroud)
我认为问题与我错误地链接 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 DECLSPEC...这个问题在例如 linux 上不存在)。所以,它找不到_imp__glfwInit,因为在静态库中它只是被调用glfwInit,所以你会得到一个错误。
删除libglfw3.a也是选项之一 - 在这种情况下,gcc 将进一步查找并最终找到glfw3.dll并使用它。
| 归档时间: |
|
| 查看次数: |
7392 次 |
| 最近记录: |