我正在尝试使用minGW在Windows上使用GLEW和GLFW开发一个openGL应用程序。在当前目录project/
中,我有目录src/
、bin/
和glfw-3.0.4.bin.WIN64/
。我在src/
目录中有test.cpp
、glew.h
、glew.c
和wglew.h
文件。
目录./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选项的顺序,但似乎没有一个能为我解决问题。
发布于 2014-03-25 14:27:41
您的问题是,gcc遵循严格的库命名约定。它尝试查找glfw3.dll.a
,但没有找到(因为它被命名为glfw3dll.a
-简单的重命名可以解决您的问题)。
下一步,它寻找libglfw3.a
,并成功-但它是一个静态库,而引用声明为头文件中的动态(棘手的窗口DECLSPEC...这个问题在linux上是不存在的)。所以,它找不到_imp__glfwInit
,因为在静态库中它只被称为glfwInit
,所以你会得到一个错误。
删除libglfw3.a
也是一种选择--在这种情况下,gcc会更进一步,最终找到glfw3.dll
并使用它。
https://stackoverflow.com/questions/22623087
复制相似问题