我正在构建一个需要与位置无关的 iPhone 应用程序。我正在链接没有源代码的第三方库。
如果这样的库没有使用 -fPIC 进行编译,因此不是位置独立的,我仍然可以链接它以生成有效的 PIE 二进制文件吗?
动态加载器是否会处理由于来自该库的代码而发生的任何文本重定位。
如果不是,我有什么可能的选择来解决这种情况并仍然生成 PIE 二进制文件?
最佳答案
据我所知,源文件是否使用 -fPIC
构建并不重要,除非您计划从其目标文件创建动态库。实际上,大多数静态库并不是以独立于位置的方式构建的。并不是说这会被禁止,但它会在以后导致二进制文件更大更慢(因为编译器/链接器将无法执行某些类型的优化)。
而且二进制文件在它自己的地址空间中运行,它根本不需要与位置无关。这就是为什么动态库必须是位置独立的原因,因为它们在不同的二进制文件之间共享,而这些二进制文件本身都需要不同的内存位置,因此动态链接器必须有可能在运行时将库移动到二进制进程空间中的其他位置。
或者用更简单的话来说:只需链接到那个静态库,一切都会好起来的。
关于ios - 静态链接非图片第三方库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19367677/