在Windows下交叉编译Linux可执行文件遇格式识别错误求助
汇编ELF64目标文件后链接报错"File format not recognized"的原因与解决
问题详情
你尝试在Windows系统下用NASM汇编生成Linux用的ELF64目标文件,再用ld链接时出现错误:
C:\>nasm -f elf64 helloWorld.s C:\>ld -o helloWorld helloWorld.o helloWorld.o: file not recognized: File format not recognized
你的目标是生成Linux操作系统的可执行文件,打算在Windows完成编译后传输到Linux使用。
错误原因
- 你使用的是Windows原生的ld链接器,它仅支持Windows平台的PE/COFF格式目标文件,无法识别
nasm -f elf64生成的ELF64格式(这是Linux系统的标准目标文件格式),因此抛出格式不识别的错误。 - 跨平台编译的核心矛盾:Windows和Linux的工具链依赖的文件格式完全不同,原生Windows工具链无法处理Linux的ELF文件。
解决办法
- 使用MinGW-w64交叉编译工具链
安装MinGW-w64后,使用对应架构的交叉链接器(比如针对x86_64 Linux的x86_64-linux-gnu-ld)来链接ELF64文件。建议全程使用交叉工具链的汇编器和链接器,确保格式匹配。 - 借助WSL(Windows子系统Linux)
在Windows上启用WSL并安装Linux发行版(如Ubuntu),直接在WSL环境下使用NASM和GNU ld编译链接,生成的可执行文件天然适配Linux,无需额外处理。 - 使用Docker容器
拉取Linux镜像(如Ubuntu),在容器内完成编译链接操作,之后将生成的可执行文件导出到Windows,再传输到Linux系统使用。
内容的提问来源于stack exchange,提问作者Mohamed Taha
相关产品推荐
相关产品推荐

