【发布时间】:2009-12-10 18:57:33
【问题描述】:
我有一个静态库 A,它也使用静态库 B、C 和 D。
然后我有应用程序 X 和 Y,它们都使用 A,但不使用 B、C 或 D。
有什么方法可以让 X 和 Y 自动看到 A 使用了 B、C 和 D 并将它们链接起来,这样我就不需要跟踪整个依赖关系树,这样我就可以显式传递每个静态库(与 Windows、Boost 等类似的东西很多)?
【问题讨论】:
我有一个静态库 A,它也使用静态库 B、C 和 D。
然后我有应用程序 X 和 Y,它们都使用 A,但不使用 B、C 或 D。
有什么方法可以让 X 和 Y 自动看到 A 使用了 B、C 和 D 并将它们链接起来,这样我就不需要跟踪整个依赖关系树,这样我就可以显式传递每个静态库(与 Windows、Boost 等类似的东西很多)?
【问题讨论】:
静态库不与其他静态库链接。只有在构建可执行文件(或共享库/DLL)时才会执行链接,而跟踪这一点的方法是(当然)使用 make。
【讨论】:
我认为,从概念上讲,您可以将库合并在一起以实现您想要的 - 它们只是在为链接器准备好符号集合之后。话虽如此,我从未见过这样做的工具。 lib 的二进制格式是编译器的问题,所以它必须是 mingw 或 gcc 特定的工具。
就知道 A 使用哪个版本的 Boost lib 而言,除了查找 A 的文档外,没有太多需要。
【讨论】:
简单的方法是始终提供要链接的特定库 A、B、C 和 D。对于真正的库,链接器只检索所需的模块。
A 与其他库有一些隐式链接的关键问题是它们不一定是唯一可识别的。例如,它应该使用 2.0 版还是 3.1 版? /usr/share/lib 中的那个还是 /usr/lib/X11/xdm/share/lib 中的那个?等等。
【讨论】: