ios - Xcode 7.2 Dynamic Framework 32 位设备错误

标签 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 位设备上工作正常。

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

最佳答案

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

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

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

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

关于ios - Xcode 7.2 Dynamic Framework 32 位设备错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35486267/

相关文章:

python - 从 32 位 python 运行 64 位 powershell

ios - 如何在iOS中将\u00e2\u0080\u0099这个字符串替换成'

c++ - std::wcout 到 Xcode 中的控制台窗口

ios - 为什么我在使用 XCode 时不能拥有名为 'retain' 的属性?

bundle - 在 64 位机器中创建 32 位 JavaFx Native Bundle

ios - 使用 Swift 将图像存储处理到 Firebase

iphone - 如何在 iOS 设备上创建新的 EKCalendar?

ios - IOS 中的自定义日历 View

ios - 适用于 twilio 的 AlamoFire

c# - 安装安装程序后运行 Windows 应用程序时 Appcrash