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

DEA*_*EEF 3 c gcc static-libraries unix-ar .a

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

  • mylib_1.c功能foo1于其中
  • mylib_2.c功能foo2于其中.

两者#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
Run Code Online (Sandbox Code Playgroud)

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

#include "mylib.h"

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我编译得像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
Run Code Online (Sandbox Code Playgroud)

GCC为什么失败?

如果它有所不同,我在Windows 7.1上运行最新版本的MinGW.

Ant*_*973 6

你可能想要-l标志而不是-Lgcc 的标志.-L添加库路径,而-l链接到库.

另外,如果你要为Linux制作那个静态库,它的名字应该以lib(但不是必须的,感谢@davmac提及)开头.所以你的图书馆的文件名应该是libmyLib.a,然后你应该链接它-lmyLib.(是的,我发现也很尴尬.)

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

在这里查看更多.