静态链接非pic第三方库

时间:2013-10-14 19:22:23

标签: ios iphone

我正在构建一个我需要与位置无关的iPhone应用程序。我正在链接第三方库,我没有源代码。

  1. 如果这样的库还没有用-fPIC编译,因此不是与位置无关的,我还能链接它以产生有效的PIE二进制文件吗?

  2. 动态加载程序是否会处理由于此库中的代码而发生的任何文本重定位。

  3. 如果没有,我有什么方法可以解决这种情况并仍然生成PIE二进制文件?

1 个答案:

答案 0 :(得分:-1)

据我所知,除非您打算从其目标文件中创建动态库,否则源文件是否使用-fPIC构建并不重要。实际上,大多数静态库不是以位置无关的方式构建的。并不是说这是禁止的,但稍后会导致稍大一点的二进制(因为编译器/链接器将无法执行某些类型的优化)。

二进制文件在它自己的地址空间中运行,它根本不必是位置独立的。这就是动态库必须位置独立的原因,因为它们在不同的二进制文件之间共享,这些二进制文件都需要不同的内存位置,因此动态链接器必须能够在运行时将库移动到二进制文件的进程空间中的其他位置。

或者用更简单的词来说:只需链接到那个静态库,一切都会好的。