【问题标题】:How to create one static library from several others static libraries in C on Linux? [duplicate]如何在 Linux 上的 C 语言中从其他几个静态库创建一个静态库? [复制]
【发布时间】:2019-12-30 07:44:01
【问题描述】:
例如,
我们有以下三个库:
1.1.......................lib_A.a
1.2.......................lib_B.a
1.3.......................lib_C.a
现在我想创建一个包含上述所有静态库的库。
我使用了以下命令:
ar -crs lib_Z.a lib_A.a lib_B.a lib_C.a
当我使用lib_Z.a 创建最终可执行文件时,编译器给了我以下错误:
添加符号时出错:存档没有索引;运行ranlib添加一个
如何解决这个问题?
【问题讨论】:
标签:
linker
static-linking
unix-ar
【解决方案1】:
您的lib_Z.a 不包含目标文件;它只包含其他.a 文件,加载程序不知道如何处理它。运行ranlib 无济于事;它不会在lib_Z.a 存档中找到任何目标文件。您必须从单独的库中提取目标文件,然后将它们全部构建到结果中:
mkdir Work
cd Work
ar -x ../lib_A.a
ar -x ../lib_B.a
ar -x ../lib_C.a
ar -crs ../lib_Z.a *.o
cd ..
rm -fr Work
您可能会遇到的唯一麻烦是如果两个库包含相同的目标文件名(例如,lib_A.a 包含 config.o,lib_B.a 也是如此,但它们定义了不同的配置)。您必须重命名一个(或两个)目标文件:
…
ar -x ../lib_A.a
mv config.o A_config.o
ar -x ../lib_B.a
mv config.o B_config.o
…