将 32 位动态库转换为 64 位的 osx

Posted

技术标签:

【中文标题】将 32 位动态库转换为 64 位的 osx【英文标题】:Convert 32 bit dynamic library to 64 bit for osx 【发布时间】:2019-11-26 09:13:12 【问题描述】:

如何将现有的动态库编译为 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 (for architecture i386): Mach-O 动态链接共享库 i386

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于将 32 位动态库转换为 64 位的 osx的主要内容,如果未能解决你的问题,请参考以下文章

win10 平台 mongodb 安装,报错误提示: 无法定位序数3253于动态链接库, 怎么解决?谢谢?

将 32 位库链接到 64 位程序

如何在 64 位 osx 上编译 gcc 32 位应用程序

过程入口点终止无法位于动态链接库中

尝试在 OS X 上为 32 位和 64 位编译 GNU 库

无法定位序数4046于动态链接库libeay32.dll上