将 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

我尝试过的事情列表:

我对这个错误有点困惑,glfwInitglfwTerminate 的定义是否不在 libglfw3.a 中?他们肯定是?但是,如果是这样,为什么 linker 会抛出未定义的引用错误?

标题以 undefined reference 开头的问题自动是与编辑 links 相关的问题(由于 link 编辑器而生成最终二进制文件,它发生在编译过程结束)

您必须确保每个所需的库不仅存在于您的系统中,而且您的构建指令确实采用了所需的库。在 Gcc 下,这对应于 -l 选项(注意,它是小写的 L 而不是大写的 i;))

我发现这个问题的解决方案是直接在 gcc 参数中给出 libglfw3.a 的文件名,而不是使用 -l 参数,所以第二个 gcc 命令应该是:

gcc test.o libglfw3.a -lgdi32