【发布时间】:2021-04-02 12:55:25
【问题描述】:
LLVM 二进制文件本质上都是交叉工具,不同的 llvm 链接器工具(例如 ld.lld.exe/ld-link.exe)只是模拟不同本机链接器(例如 GNU ld/Windows link.exe)的驱动程序。基于相同的 LLVM 链接器核心。所以每一个都应该能够为不同的目标格式生成二进制文件,比如任何主机平台上的 PE 或 ELF。
以Windows 10上的ld.lld.exe为例,
ld.lld.exe --oformat elf -o test.exe main.o
有效(test.exe 肯定不能在 Windows 上运行),但“--oformat pe”或“--oformat coff”不起作用。
我知道 ld-link 更容易生成 PE 可执行文件,但这里的目的是试验 LLVM 工具的交叉特性。
根据this,对于GNU ld,--oformat 支持的参数可以从“objdump -i”获得,因为这两个程序都是基于BFD。但是 LLVM 的 ld 工具似乎不是基于 BFD,我根据 Ubuntu 的“objdump -i”的结果尝试了“--oformat pei”和“--oformat pei-x86-64”,两者都没有不行。
如何知道每个 LLVM 链接器工具的 --oformat 标志支持哪些参数?
【问题讨论】: