c++ - Linux动态和静态链接

标签 c++ linux qt shared-libraries

我有一个与共享库“A”链接的可执行文件,后者又使用共享库“B”(用 Qt 编写的 GUI)。 当我编译可执行文件时,链接器会查找所有库,包括“B”,以及它在内部需要的所有库(Qt 库)。 我怎样才能以这样的方式断开“B”库与可执行文件的连接,使其在链接时不需要“B”。 我希望可执行文件不知道“B”库。

最佳答案

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

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

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

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

关于c++ - Linux动态和静态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701919/

相关文章:

qt - 使用 fontconfig 支持为 Linux x86 构建 Qt

macos - 错误 : Could not resolve SDK path for 'macosx10.9'

c++ - 您可以在命令行上使用 visual-c++ 静态链接特定库吗?

c++ - 返回本地创建的 const char*

c++ - 排序 C++,第一个元素不工作

linux - BASH If [[ "$a"== *"$b"* ]] 始终为真,即使它不应该为真

linux - 在 Linux 服务器上部署 Angular 5 应用程序

c - UDP 广播在 Linux 2.6.33.9 rt 上一段时间后中断

c++ - cpp - valgrind - 大小为 8 的无效读取

qt - 我在哪里可以下载 Ubuntu 的 qmlscene