【问题标题】:Xcode 7.2 Dynamic Framework 32 bit device errorXcode 7.2 动态框架 32 位设备错误
【发布时间】:2016-05-30 21:39:30
【问题描述】:

我们有一个包含多个应用程序的大型项目,因此我们将通用代码移到了单个动态框架中。目前在 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 位设备上运行良好。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2012-12-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多