如果在可执行文件中使用了gcc -fPIC标志,那么用于编译对象的含义是什么呢?

use*_*745 12 executable gcc shared-libraries fpic

我正在为我正在进行的项目整理一个makefile.我在项目中有一个可执行文件和一个共享库.两者都使用一些相同的源文件,这些文件分别编译到目标文件中.为了能够在共享库中使用这些对象,我需要在gcc中使用-fPIC(位置无关代码)标志.使用可执行文件中使用的-fPIC编译对象是否有任何影响?

eph*_*ent 9

在不需要的时候编译与位置无关的代码是某些平台上的性能拖累(最值得注意的是,寄存器缺乏x86架构,因为PIC带走了一个可以在非PIC时更自由地使用的寄存器),但是应该没有任何损害效果否则.

更进一步,甚至可以创建一个-fPIE仅与位置无关的代码构建的与位置无关的可执行文件().

话虽这么说,libtool可以为你编译的每个源文件自动生成PIC和非PIC对象,即使在没有libtool集成的构建系统中也应该很容易做到这一点.