尝试使用我自己的静态 C 库进行编译

Attempting to compile with my own static C library

我编译了一个静态库。我有两个文件。

两者都#include "mylib.h"

我像这样编译了一个库:

gcc -c mylib_1.c -o mylib_1.o
gcc -c mylib_2.c -o mylib_2.o
ar cr mylib.a mylib_1.o mylib_2.o

然后我尝试用我的库编译 mylib_test.c

#include "mylib.h"

int main(void)
{
    foo1("do something cool");
    foo2("do something cool");

    return 0;
}

如果我像 gcc mylib_test.c mylib.a 那样编译,GCC 成功并且一切正常。

如果我像 gcc mylib_test.c -Lmylib.a 那样编译,GCC 会失败:

C:\path\to\mylib_test.c:x: undefined reference to foo1
C:\path\to\mylib_test.c:x: undefined reference to foo2

为什么 GCC 会失败?

如果有区别的话,我是 运行 Windows 7.1 上的最新版本的 MinGW。

对于 gcc,您可能需要 -l 标志而不是 -L 标志。 -L 添加库路径,而 -l link 添加到库。

另外,如果你正在为 Linux 创建静态库,它的名称应该以 lib 开头(但是 does not have to,感谢 @davmac 的提及)。所以你的图书馆的文件名应该是 libmyLib.a,然后你应该 link 用 -lmyLib 来反对它。 (是的,我也觉得很尴尬。)

我不知道 Windows,但我猜 Windows 静态库的等价物就是 myLib.lib。如果您正在制作 Windows 库,请先验证此声明。

查看更多here.