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

时间:2018-07-10 20:42:35

标签: linux qt shared-libraries

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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