Windows下使用clang/llvm编译Linux二进制报function not supported错误
错误原因
Windows版LLVM的lld链接器默认目标平台为Windows,未指定格式时会尝试生成PE格式可执行文件,与你编译得到的Linux ELF格式目标文件不匹配,同时默认输出文件名a.out不符合Windows环境下的默认输出规则,因此抛出功能不支持的错误。你现有的官方LLVM 13.0工具链无需更换,添加对应参数即可完成编译。
操作步骤
- 编译环节的命令无需调整,可正常生成符合要求的目标文件:
"C:\Program Files\LLVM\bin\clang.exe" -c slim.c -static -nostdlib --target=x86_64-pc-linux-gnu
- 链接环节添加参数指定目标格式和输出文件名:
"C:\Program Files\LLVM\bin\ld.lld.exe" -m elf_x86_64 slim.o -o slim
参数说明:
-m elf_x86_64:指定链接生成x86_64架构的Linux ELF格式可执行文件-o slim:指定输出文件名为slim,避免默认a.out带来的Windows平台兼容问题
如果需要用clang一步完成编译链接,使用以下命令即可:
"C:\Program Files\LLVM\bin\clang.exe" slim.c -static -nostdlib --target=x86_64-pc-linux-gnu -fuse-ld=lld -o slim
验证方法
你可以用LLVM自带的readobj工具确认生成的文件格式正确:
"C:\Program Files\LLVM\bin\llvm-readobj.exe" -h slim
输出中显示OS/ABI: UNIX - Linux、Type: EXEC (Executable file)即为正常,将生成的slim文件放到Linux环境或WSL中即可直接运行。
内容的提问来源于stack exchange,提问作者Eric Stotch
相关产品推荐
相关产品推荐

