问题描述
我尝试将静态 C 库 1 与静态 C 库 2 打包。使用库 1 时,但找不到包静态 C 库 2 的符号。
代码如下。
⋊> /d/m/test cat libaa.h
int square(int a);
⋊> /d/m/test cat libaa.c
int
square(int a) {
return a*a;
}
gcc -c -o libaa.o libaa.c
ar rcs libaa.a libaa.o
⋊> /d/m/test cat libmm.h
int squareProxy(int a);
⋊> /d/m/test cat libmm.c
#include "libaa.h"
int
squareProxy(int a) {
return square(a);
}
创建 libmm 静态库。
gcc -c libmm.c -o libmm.o
ar rcs libmm.a libmm.o
我看不到 libmm.a 中的 libaa.a 符号
⋊> /d/m/test nm libmm.a
libmm.o:
U square
0000000000000000 T squareProxy
⋊> /d/m/test cat main.c 21:27:41
#include "libmm.h"
int
main(int argc,char **argv) {
return squareProxy(5);
}
这里 main.c
尝试调用 libmm.a 方法。但是我们不能这样编译。
⋊> /d/m/test gcc main.c libmm.a -L. -lmm
libmm.a(libmm.o): In function `squareProxy':
libmm.c:(.text+0x11): undefined reference to `square'
collect2: error: ld returned 1 exit status
必须用 libaa.a 编译
⋊> /d/m/test gcc main.c libmm.a libaa.a -L. -lmm
⋊> /d/m/test
总而言之,我们似乎无法将静态库与其他静态库一起归档?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)