Linux动态和静态链接

时间:2014-12-30 08:25:09

标签: c++ linux qt shared-libraries

我有一个与共享库链接的可执行文件' A' ,反过来使用共享库' B' (用Qt编写的GUI)。 当我编译可执行文件时,链接器会查找所有库,包括' B'以及它内部需要的所有库(Qt库)。 如何断开' B'来自可执行文件的库,使得它不需要' B'在链接时间。 我希望可执行文件不会知道' B'库。

1 个答案:

答案 0 :(得分:1)

假设您可以从源代码构建依赖项“B”,则可以通过将“A”静态链接到“B”来将其隐藏在可执行文件中。

如果无法从源代码编译“B”,则可以限制“B”中未明确使用的符号的可见性。您可以通过Unix系统上的'ld'命令完成此操作。我对此知之甚少。 This帖子可能会提供一些建议。然而,它们非常明确和手动,因此如果'B'是一个包含许多符号的大型库,则可能不太适用。我怀疑这不是你想要的。

您希望在可执行文件上调用'ldd'命令时不显示'B'。是吗?

或者您只是想让用户更轻松地安装您的可执行文件?如果是,您仍然可以在一定程度上自动化安装。