首页 文章

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

提问于
浏览
11

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

1 回答

  • 9

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

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

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

相关问题