尝试使用我自己的静态 C 库进行编译
Attempting to compile with my own static C library
我编译了一个静态库。我有两个文件。
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。
对于 gcc,您可能需要 -l
标志而不是 -L
标志。 -L
添加库路径,而 -l
link 添加到库。
另外,如果你正在为 Linux 创建静态库,它的名称应该以 lib
开头(但是 does not have to,感谢 @davmac 的提及)。所以你的图书馆的文件名应该是 libmyLib.a
,然后你应该 link 用 -lmyLib
来反对它。 (是的,我也觉得很尴尬。)
我不知道 Windows,但我猜 Windows 静态库的等价物就是 myLib.lib
。如果您正在制作 Windows 库,请先验证此声明。
查看更多here.
我编译了一个静态库。我有两个文件。
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。
对于 gcc,您可能需要 -l
标志而不是 -L
标志。 -L
添加库路径,而 -l
link 添加到库。
另外,如果你正在为 Linux 创建静态库,它的名称应该以 lib
开头(但是 does not have to,感谢 @davmac 的提及)。所以你的图书馆的文件名应该是 libmyLib.a
,然后你应该 link 用 -lmyLib
来反对它。 (是的,我也觉得很尴尬。)
我不知道 Windows,但我猜 Windows 静态库的等价物就是 myLib.lib
。如果您正在制作 Windows 库,请先验证此声明。
查看更多here.