静态 C 库递归地打包静态 C 库但是从底部库中没有得到符号

问题描述

我尝试将静态 C 库 1 与静态 C 库 2 打包。使用库 1 时,但找不到包静态 C 库 2 的符号。
代码如下。

假设 libaa代码显示

⋊> /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

假设 libmm 源代码显示

⋊> /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 (将#修改为@)