我想构建一个与共享库链接的qt应用程序(默认情况下,qt应用程序会这样做)。但是,qt始终将应用程序编译为共享库。我知道这是可能的,因为我发现了几个可以动态链接的Linux应用程序(而非共享库)。例如,大多数KDE应用程序都是用Qt编写的,但仍然是应用程序,而不是共享库。
是否存在允许我在Linux上构建qt 应用的编译器/链接器标志?请-static
不回答。
答案 0 :(得分:0)
它们不是共享的库,而是普通的应用程序。
在现代GNU / Linux系统上,程序被编译为 PIE (位置独立可执行文件)。出于安全原因,这样做是为了使程序的text
部分(即代码)每次运行时都可以在新的随机地址处加载。
从ELF /内核的角度来看,加载PIE程序的过程与加载PIC共享库的过程极为相似,因此PIE可执行文件的ELF类型为ET_DYN
,这是共享库使用的类型。
由于这个原因,某些程序(例如file(1)
)会将它们识别为共享库,但它们不是不是共享库。