linux - 如何构建在 Linux 上动态链接的 qt 应用程序(非共享库)

标签 linux qt shared-libraries

我想构建一个与共享库链接的 qt 应用程序(默认情况下是 qt 应用程序)。但是qt总是把app编译成共享库。我知道这是可能的,因为我发现了几个动态链接的 Linux 应用程序(不是共享库)。例如,大多数 KDE 应用程序是用 Qt 编写的,但仍然是应用程序,而不是共享库。 是否有允许我在 Linux 上构建 qt 应用程序 的编译器/链接器标志?请不要回答 -static

最佳答案

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

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

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

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

关于linux - 如何构建在 Linux 上动态链接的 qt 应用程序(非共享库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273595/

相关文章:

linux - 在双引号内使用双引号

c - 相同 C 库的路径/ namespace 冲突

cruisecontrol.net - 共享代码库和巡航控制测试

linker - MIPS、ELF 和部分链接

linux - 一种在 Ubuntu Karmic 中发现 CPU 数量和每个 CPU/核心规范的编程方法?

linux - 如何编写可在 Windows 和 Linux 上运行的 bash 脚本

c++ - QElapsedTimer 可以测量多长时间?

c++ - 从QT的MainWindow中的另一个函数更新标签

java - 通过java运行终端命令

c++ - 是否可以将一个类的插槽或常规函数连接到另一个类的插槽或常规函数? (QT)