除共享库外,g ++ -fPIC是否也适用于可执行文件?

时间:2017-03-24 11:59:50

标签: c++ g++ shared-libraries options fpic

我理解g ++ -fPIC选项很好地解释了:GCC -fPIC option 我有很多源文件,通过makefile进行构建。很难分离出作为可执行文件或共享库一部分的源文件。我是否可以将g ++的-fPIC选项用于编译的任何文件:

g++ -c -fPIC ....

以后,如果它是共享库,则链接-shared,否则没有-shared可执行文件。

2 个答案:

答案 0 :(得分:1)

可以使用-fPIC构建可执行文件,但这可能会导致性能损失,因为编译器会做出更保守的假设,例如关于内联(允许runtime symbol interposition)。要生成与位置无关的可执行文件,最好使用-fPIE标记(现在默认情况下,大多数现代发行版,例如Ubuntu生成)。

在任何情况下,除非你真的不关心性能,否则你需要使用不同的标志编译你的文件两次。

答案 1 :(得分:-1)

我可以在编译中使用g ++的-fPIC选项吗?

是。如果给出诸如汇编文件之类的东西,它就没有效果。

[...]以后,如果是共享库,请链接-shared?

是。