2011-09-03 212 views
0

可能重复:
How to pack multiple library archives (.a) into one archive file?UNIX:静态库链接到静态库

我有一个情况我必须向一个只提供一个单一的静态库(某文件)可执行文件来构建它。

然而,我在2份分割此lib中,因为一个部件是共同的其他可执行文件,而另一个仅由一个需要的。

所以现在我有lib1内(对于EXE1)和LIB2(所有EXE文件)

的问题是,我不能提供两个库,所以我必须合并为EXE1,LIB2到LIB1

我想我的编译lib1.o与-llib2但即使它的工作原理,它看起来像什么也没发生

是否还有其他的办法吗?我只能考虑使用原始的目标文件,但我不喜欢这个主意

回答

3

有没有需要两个静态库;当使用静态库时,只有需要的函数(或变量)被复制到可执行文件 - 与共享库不同的是库中的所有内容都可以被可执行文件访问。

机械,引用的其他question说明你需要做的:

  • 从一个库中提取所有的目标文件
  • 将它们添加到其他图书馆

或者:

files=$(ar t lib1.a) 
ar x lib1.a 
ar r lib2.a $files 
rm -f $files lib1.a 
+0

它像一个魅力^^ –

0

你甚至可以编译每个源文件,生成al l .o并通过使用ar创建两个不同的库。 整个库将使用所有.o(您一起放入lib1.a和lib2.a中的那些)生成,较小的将只使用一组缩小的.o文件。 ...比单个Makefile,.o文件产生一次,两个库从这个工作中出来:完整的一个(libaplus2.a)和缩小的(lib1.a)。