Xcode 7.2动态框架32位设备错误

Adi*_*mro 8 xcode 32bit-64bit dynamic-library ios

我们有一个包含多个应用程序的大型项目,因此我们将公共代码移动到单个动态框架中.到目前为止,在64位设备上正常运行,但在32位设备上崩溃如下:

dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB has segment 0 which is not a writable segment (__TEXT) in
/path/to/MyApp.app/Frameworks/MyFramework.framework/MyFramework
Run Code Online (Sandbox Code Playgroud)

一点背景:我们已经编译了很少的其他胖库ARM64,ARMv7然后x86_64架构添加到框架中.我们有一些文本重定位错误,通过添加-read_only_relocs suppress到链接器标志来解决.

如果我们取出ffmpeg和相关的库,它可以在32位设备上正常工作.

有人遇到过这样的错误吗?任何指针或帮助将非常感激.

Jea*_*oin 1

在框架内使用 Mach-O 类型的“动态库”时,我们遇到了同样的问题。切换到“可重定位对象文件”解决了该问题。问题似乎与库内的文本重定位有关。

正如此处更详细的描述:“文本重定位是在运行时使用绝对寻址模式引用具有变量地址的对象的结果。指令编码本身包含地址,因此必须更改二进制文件的可执行文本在考虑运行时的实际加载地址时包含正确的地址。”

FFMPEG 使用文本重定位,这在 Android M 上是一个大问题(https://trac.ffmpeg.org/ticket/4928

由于它们不会很快得到修复,“可重定位对象文件”似乎是唯一的选择。