【发布时间】:2012-02-09 10:52:32
【问题描述】:
我有一个 lib (*.a) 文件,它是用 armcc 以 elf 格式创建的。不可能用 llvm 或 gcc 重新编译它。 (它是为 armcc 编写的汇编程序)。
将它与 gnu ld 链接在 Linux 上可以正常工作,但我在 Mac 上使用 llvm 时遇到问题。
由于 obj 文件的内部格式不同,它会说“忽略文件...不是被链接的架构”
有解决办法吗?一种将精灵转换为 Mach-O 格式的方法?告诉llvm关于精灵?
有这样一个用于 x86/86-64 的 tool,由 Agner Fog 编写,但我正在寻找一个 ARM 工具。
【问题讨论】:
-
如果库是为 linux 编译的,很可能你不能在 Darwin/iOS 中使用它。如果它只有 asm 而没有系统调用/库调用,则可以进行转换。
-
从技术上讲,这是可能的。它没有特定于操作系统的代码,但我没有找到任何转换格式的工具/脚本/方法
-
我认为反汇编 .a 文件(用 ar 解压)然后用一些 Mach-O 汇编器(来自 binutils)组装回来会更容易。
-
ar 只提取 obj 文件。但是 obj 格式仍然不兼容 - Mac ld 将无法在 Mach-O 中重新打包它们
-
obj 文件需要反汇编。我不知道arm的反汇编程序,可以试试
objdump -d,然后将代码重新格式化为简单的.s文件?