【问题标题】:is g++ -fPIC applicable for executable too in addition to shared libraries?除了共享库之外,g++ -fPIC 是否也适用于可执行文件?
【发布时间】:2017-08-17 08:38:49
【问题描述】:

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

g++ -c -fPIC ....

以后,如果是共享库,用-shared链接,否则不用-shared作为可执行文件。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • @OMGtechy 我很想知道具体的例子。
    【解决方案2】:

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

    是的。如果给出了诸如汇编文件之类的东西,它将不起作用。

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

    是的。

    【讨论】:

    • 这个答案没有提到使用-fPIC 的潜在后果(例如性能问题)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-23
    • 2012-08-13
    • 2023-04-07
    • 2014-01-14
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多