除了共享库之外,g++ -fPIC 也适用于可执行文件


我理解g++ -fPIC选项

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

g++ -c -fPIC ....

稍后,如果它是共享库,请与 -shared 链接,否则不-shared可执行文件。

可以使用-fPIC构建可执行文件,但这可能会导致性能损失,因为编译器会做出更保守的假设,例如关于内联(允许运行时符号插入(。要生成与位置无关的可执行文件,您最好使用-fPIE标志(大多数现代发行版,例如 Ubuntu 构建现在默认打开它(。

无论如何,除非你真的不关心性能,否则你需要用不同的标志编译你的文件两次。

我可以对任何正在编译的文件使用 g++ 的 -fPIC 选项吗?

是的。如果给定诸如程序集文件之类的内容,它将不起作用。

[ ... ] 以后,如果它是一个共享库,则与 -shared 链接?

是的。

最新更新