我知道-fPIC
对于共享库是必需的,并且知道为什么。
然而,我不清楚这个问题:
在构建可执行文件或静态库时,是否应始终不使用-fPIC
?
我知道-fPIC
对于共享库是必需的,并且知道为什么。
然而,我不清楚这个问题:
在构建可执行文件或静态库时,是否应始终不使用-fPIC
?
-fPIC
?-fPIC
构建的代码(略微)不太优化,那么为什么要将其放入除共享库之外的任何东西中呢?-fPIC
构建用于链接到共享库,一个使用-fPIE
构建用于链接到PIE可执行文件,以及一个“常规”存档库),或者您可以提供一个单一的存档库(其中必须具有使用-fPIC
构建的代码)。-fPIC
代码链接到这种可执行文件中的原因是什么?-fPIC
以及使用-fPIE
),或者您可以将其编译一次(使用-fPIC
)并将其链接到所有3个共享库、PIE和非PIE可执行文件中。这样做可以节省大量编译时间和某些构建系统复杂性。-fPIC
对象放入可执行文件和静态库中是有其位置的,您应该了解为什么要这样做(如果最终要这样做)。.text
(和.rodata
)的任何重定位。
-fPIC
或-fpic
编译或不使用这些选项都会产生相同大小的目标代码,使用GCC 7.3.0。但那不一定是ELF;对象文件是Mach-O 64位对象x86_64
。) - Jonathan Leffler