UNIX:链接到静态库的静态库

时间:2011-09-03 15:27:40

标签: c unix static-libraries

  

可能重复:
  How to pack multiple library archives (.a) into one archive file?

我的情况是,我必须只提供一个静态库(.a文件)到可执行文件来构建它。

但是,我将这个lib拆分为两部分,因为一部分对于其他可执行文件是通用的,另一部分只需要一部分。

所以现在我有lib1(对于exe1)和lib2(对所有exes)

问题是我不能提供两个库,所以我必须将exe1,lib2合并到lib1

我尝试使用-llib2编译lib1.o,但即使它有效,看起来好像什么也没发生

还有其他方法吗?我只能考虑使用原始对象文件,但我不喜欢这个想法

2 个答案:

答案 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)。