我编译了一个静态库。我有两个文件。
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。
答案 0 :(得分:6)
您可能需要-l
标志而不是gcc的-L
标志。 -L
添加了库路径,而-l
则链接到库。
另外,如果要为Linux创建静态库,则其名称应以lib
开头(但does not have to,感谢@davmac提及)。因此,您图书馆的文件名应为libmyLib.a
,然后您应将其与-lmyLib
相关联。 (是的,我发现也很尴尬。)。
我不了解Windows,但我认为Windows静态库的等价物只是myLib.lib
。如果您正在制作Windows库,请先验证此声明。
查看更多here。