【发布时间】:2014-03-25 00:09:15
【问题描述】:
我正在尝试使用 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 选项的顺序,但似乎都没有解决问题我。
【问题讨论】:
-
您的 gcc 命令分为两行。是为了可读性吗?或者那是您的实际命令(在这种情况下,这是错误的)?另外,我记得,
-Ipath和-Lpath必须不带空格。 -
是的,对不起,我应该注意到 gcc 命令是为了可读性而拆分的。运行不带空格的命令仍然会产生同样的错误。
-
不能肯定,但我猜你的库有问题。您确定它们与 mingw 兼容并且应该是 64 位的吗?你能用 32 位版本运行它吗?
-
啊,我真的以为这样可以解决问题。我一直在将 mingw 用于 32 位系统。我切换到使用 glfw-3.0.4.bin.WIN32 但我仍然得到相同的编译时错误。
-
您能组装最小示例(包含所有必需的源和库)并将其上传到某个地方吗?没有看到就很难诊断出这类问题。