我编译了一个静态库。我有两个文件。
-
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:pathtomylib_test.c:x: undefined reference to foo1
C:pathtomylib_test.c:x: undefined reference to foo2
为什么GCC失败?
如果有所不同,我正在Windows 7.1上运行最新版本的mingw。
您可能需要-l
标志,而不是GCC的-L
标志。-L
添加了库路径,而-l
链接到库。
另外,如果您要为Linux制作静态库,则其名称应以lib
开头(但不必为了提及@DavMac)。因此,您的库的文件名应该为libmyLib.a
,然后您应与-lmyLib
链接。(是的,我也觉得很尴尬。)。
我不知道Windows,但我想Windows静态库的等效内容只是myLib.lib
。如果您要制作Windows库,请先验证此声明。
请参阅此处的更多信息。