首页 > 解决方案 > 将 32 位动态库转换为 64 位的 osx

问题描述

如何将现有的动态库编译为 64 位兼容 mac 平台。我没有库的代码库,只有 xxx.dylib。

文件 xxx.dylib

xxx.dylib:具有 2 个架构的 Mach-O 通用二进制文件:[ppc:Mach-O 动态链接共享库 ppc] [i386:Mach-O 动态链接共享库 i386] xxx.dylib(用于架构 ppc):Mach-O 动态链接共享库 ppc xxx.dylib(用于架构 i386):Mach-O 动态链接共享库 i386

标签: macosshared-libraries32bit-64bitdynamic-librarylibtool-xcode

解决方案


你不能。没有原始源代码,无法将 dylib 重新编译为 64 位。

更糟糕的是,即使是一些疯狂的二进制后处理也不是真正可行的。

dylib 是Mach-o最终的胖二进制可执行格式。主要挑战是:

  • 切片中的 32 位 x86 英特尔操作码i386- 你不能毫不费力地将它们转换为x86-64,这实际上是一个不同的二进制文件
  • 最有可能0x1000是用于启动的虚拟内存的起源__TEXT(通常0x1000000在 x86-64 中),您也许可以侥幸逃脱 dylib 转而不使用ASLR / PIE ,但这仍然很可能会中断
  • 遗留的Mach-O加载命令,最终一些可能会停止被内核支持

推荐阅读