2009-12-10 78 views
1

我有一个静态库A,其中还使用静态库B,C和D.自动链接一个静态库的依赖性

我然后有应用X和Y这两者中使用的,但不是B,C或D.

是否有某种方式来使其X和Y将自动看到一个用B,C和d并将它们连接起来,这样我就不需要跟踪整个依赖关系树这样我就可以显式传递每个静态库(相当多的东西像Windows,Boost等)?

回答

2

静态库不会与其他静态库链接。只有建立在可执行文件(或共享库/ DLL)的联动执行,并跟踪此(当然)是使用化妆的方式。

-1

简单的方法是,以始终提供特定库A,B,C,和d被链接。对于真正的库,链接器仅检索所需的模块。

A与其他库有一些隐式链接的关键问题是它们不一定是唯一可识别的。例如,它应该使用版本2.0还是3.1?一个在/ usr /共享/ lib或一个在/ usr/lib中/ X11/xdm的/股/ lib目录?等

+0

的问题是一样的东西提升其很难X知道哪个升压libaries A中使用的,如果X didnt碰巧使用相同的Boost库链接错误,因此原因,我希望它automatcally链接它。如果A使用了1.38的增强和X 1.40的增强,那么无论天气如何,这个特定组件的链接都是自动的,或者是经过了解使用哪个增强库A的相当大的努力。 – 2009-12-10 19:08:41

+0

这样做的缺点当然是延长了链接时间。 – 2009-12-10 19:08:46

1

我认为,从概念上讲,您可能可以将库合并在一起以达到您想要的效果 - 它们仅仅是为链接器准备好的符号集合。话虽如此,我从来没有见过一个工具来做到这一点。 lib的二进制格式是一个编译器问题,所以它必须是一个mingw或gcc特定的工具。

在升压知道哪个版本的LIB A使用方面,确实没有太多了,但找到A.文档

+0

如果您使用GCC编译器(或其他UN * X/Linux编译器),则可以使用ar工具来操作静态库。在这些平台上,库是简单的连接目标文件,带有可选的索引。但是,从多个小型图书馆创建一个大型图书馆是一个好主意是另一回事。 – 2009-12-10 20:02:44