【问题标题】:How to build a qt application (not shared lib) that links dynamically on Linux如何在 Linux 上构建动态链接的 qt 应用程序(不是共享库)
【发布时间】:2018-07-10 20:42:35
【问题描述】:

我想构建一个与共享库链接的 qt 应用程序(就像 qt 应用程序默认做的那样)。但是 qt 总是将应用程序编译为共享库。我知道这是可能的,因为我发现了几个动态链接的 Linux 应用程序(不是共享库)。例如,大多数 KDE 应用程序都是用 Qt 编写的,但仍然是应用程序,而不是共享库。 是否有允许我在 Linux 上构建 qt applications 的编译器/链接器标志?请无人接听-static

【问题讨论】:

  • 或许这会解决你的问题 --> stackoverflow.com/questions/7626526/…
  • 感谢您的回复,但没有。我的应用程序与动态库链接良好,但 qt 将其编译为共享库。由于我的问题是 Qt 特有的,我将编辑问题。

标签: linux qt shared-libraries


【解决方案1】:

它们不是共享库,而是普通的应用程序。

在现代 GNU/Linux 系统上,程序被编译为 PIE(定位独立可执行文件)。出于安全原因,这样做是为了允许程序的 text 部分(即代码)在每次运行程序时加载到新的随机地址。

从 ELF/内核的角度来看,加载 PIE 程序的过程与加载 PIC 共享库的过程非常相似,因此 PIE 可执行文件的 ELF 类型为 ET_DYN,这是共享库使用的类型。

因此,某些程序(例如 file(1))会将它们识别为共享库,但它们不是共享库。

【讨论】:

  • 谢谢,非常有帮助。 KDE 团队应该对此有所作为。
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多