可能最终出现在共享库中的所有内容是否总是需要使用 -fPIC 进行编译?

问题描述

我正在构建一个共享库。我只需要其中的一个函数即可公开。

共享库由几个目标文件和几个静态库构建而成。链接器抱怨一切都应该用 -fPIC 构建。所有目标文件和大多数静态库都是在没有这个选项的情况下构建的。

这让我问了很多问题:

  1. 我是否必须使用 -fPIC 重建这个动态库所需的每个目标文件和每个静态库?只有这样吗?

  2. 链接器必须能够在链接期间静态地重新定位目标文件。正确的?否则,如果目标文件使用硬编码的常量地址,它们可能会相互重叠。这不应该意味着链接器拥有为每个目标文件创建全局偏移表所需的所有信息以及创建共享库所需的所有其他信息吗?

  3. 我是否应该始终将 -fPIC 用于将来的所有内容作为默认选项,以防某天动态库可能需要某些内容?

我目前正在 x86_64 上的 Linux 上工作,但我对任何平台的答案都很感兴趣。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)