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

时间:2017-03-08 22:53:57

标签: c gcc static-libraries 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

然后我尝试用我的库编译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。

1 个答案:

答案 0 :(得分:6)

您可能需要-l标志而不是gcc的-L标志。 -L添加了库路径,而-l则链接到库。

另外,如果要为Linux创建静态库,则其名称应以lib开头(但does not have to,感谢@davmac提及)。因此,您图书馆的文件名应为libmyLib.a,然后您应将其与-lmyLib相关联。 (是的,我发现也很尴尬。)。

我不了解Windows,但我认为Windows静态库的等价物只是myLib.lib。如果您正在制作Windows库,请先验证此声明。

查看更多here