将 GLFW 与 MinGW 链接时出现未定义的引用错误
Undefined reference errors when linking GLFW with MinGW
我知道这个问题在 SO 上很常见,但 none 的其他答案似乎对我有用。
Here 是 GLFW 的文档,用于使用 MinGW 构建应用程序,这正是我想要做的。
我在这里做了一个最小可重现的例子:
test.c:
#include <glfw3.h>
int main() {
glfwInit();
glfwTerminate();
return 0;
}
这就是我想要做的:
gcc -c test.c -Iinclude
gcc test.o -lglfw3 -lgdi32 -o test.exe
这是给我的错误:
test.o:test.c:(.text+0xc): undefined reference to `glfwInit'
test.o:test.c:(.text+0x11): undefined reference to `glfwTerminate'
collect2.exe: error: ld returned 1 exit status
我尝试过的事情列表:
- 我已经尝试了 32 位和 64 位 glfw3 静态库。
- 我也试过 link参考我之前指定的文档中的其他库引用,例如 kernel32 和 user32,错误没有改变。
- 我试过更改 link 库的顺序。
我对这个错误有点困惑,glfwInit
和 glfwTerminate
的定义是否不在 libglfw3.a
中?他们肯定是?但是,如果是这样,为什么 linker 会抛出未定义的引用错误?
标题以 undefined reference 开头的问题自动是与编辑 links 相关的问题(由于 link 编辑器而生成最终二进制文件,它发生在编译过程结束)
您必须确保每个所需的库不仅存在于您的系统中,而且您的构建指令确实采用了所需的库。在 Gcc 下,这对应于 -l 选项(注意,它是小写的 L 而不是大写的 i;))
我发现这个问题的解决方案是直接在 gcc 参数中给出 libglfw3.a 的文件名,而不是使用 -l 参数,所以第二个 gcc 命令应该是:
gcc test.o libglfw3.a -lgdi32
我知道这个问题在 SO 上很常见,但 none 的其他答案似乎对我有用。 Here 是 GLFW 的文档,用于使用 MinGW 构建应用程序,这正是我想要做的。 我在这里做了一个最小可重现的例子:
test.c:
#include <glfw3.h>
int main() {
glfwInit();
glfwTerminate();
return 0;
}
这就是我想要做的:
gcc -c test.c -Iinclude
gcc test.o -lglfw3 -lgdi32 -o test.exe
这是给我的错误:
test.o:test.c:(.text+0xc): undefined reference to `glfwInit'
test.o:test.c:(.text+0x11): undefined reference to `glfwTerminate'
collect2.exe: error: ld returned 1 exit status
我尝试过的事情列表:
- 我已经尝试了 32 位和 64 位 glfw3 静态库。
- 我也试过 link参考我之前指定的文档中的其他库引用,例如 kernel32 和 user32,错误没有改变。
- 我试过更改 link 库的顺序。
我对这个错误有点困惑,glfwInit
和 glfwTerminate
的定义是否不在 libglfw3.a
中?他们肯定是?但是,如果是这样,为什么 linker 会抛出未定义的引用错误?
标题以 undefined reference 开头的问题自动是与编辑 links 相关的问题(由于 link 编辑器而生成最终二进制文件,它发生在编译过程结束)
您必须确保每个所需的库不仅存在于您的系统中,而且您的构建指令确实采用了所需的库。在 Gcc 下,这对应于 -l 选项(注意,它是小写的 L 而不是大写的 i;))
我发现这个问题的解决方案是直接在 gcc 参数中给出 libglfw3.a 的文件名,而不是使用 -l 参数,所以第二个 gcc 命令应该是:
gcc test.o libglfw3.a -lgdi32