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



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

  • 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库,请先验证此声明。

请参阅此处的更多信息。

最新更新