我想构建一个与共享库链接的 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/