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

时间:2016-02-18 15:57:08

标签: ios xcode 32bit-64bit dynamic-library

我们有一个拥有多个应用的​​大型项目,因此我们已将公共代码移动到单个动态框架中。到目前为止,在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

一些背景知识:我们已经针对ARM64ARMv7x86_64架构编译的ffmpeg和其他一些胖库已添加到框架中。我们有一些文本重定位错误,通过将-read_only_relocs suppress添加到链接器标志来解决。

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

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

1 个答案:

答案 0 :(得分:1)

使用" Dynamic Library"时遇到同样的问题。对于框架内的Mach-O Type。切换到"可重定位目标文件"解决了这个问题。问题似乎与库内的文本重定位有关。

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

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

由于它们不会很快被修复,"可重定位目标文件"似乎是唯一的选择。