可能重复:
How to pack multiple library archives (.a) into one archive file?
我的情况是,我必须只提供一个静态库(.a文件)到可执行文件来构建它。
但是,我将这个lib拆分为两部分,因为一部分对于其他可执行文件是通用的,另一部分只需要一部分。
所以现在我有lib1(对于exe1)和lib2(对所有exes)
问题是我不能提供两个库,所以我必须将exe1,lib2合并到lib1
我尝试使用-llib2编译lib1.o,但即使它有效,看起来好像什么也没发生
还有其他方法吗?我只能考虑使用原始对象文件,但我不喜欢这个想法
答案 0 :(得分:3)
不需要两个静态库;当使用静态库时,只需要将所需的函数(或变量)复制到可执行文件中 - 与共享库不同,可以访问库中的所有内容。
从机制上讲,引用的其他question描述了您需要做的事情:
或者:
files=$(ar t lib1.a)
ar x lib1.a
ar r lib2.a $files
rm -f $files lib1.a
答案 1 :(得分:0)
您甚至可以编译每个源文件,生成所有.o并使用ar创建两个不同的库。 整个库将使用所有.o(你在lib1.a和lib2.a中放在一起)生成,较小的将只使用一组简化的.o文件。 比...单个Makefile,.o文件生成一次,两个库来自这个作业:完整的一个(libaplus2.a)和缩减的一个(lib1.a)。