You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下如何使用clang自带链接器完成汇编代码链接

Windows环境下Clang完整编译链接方案
  • 单步执行命令,自动完成汇编+链接:
    clang my.s -fuse-ld=lld -target x86_64-pc-windows-msvc -L"C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x64" -o my.exe /ENTRY:main
    
  • 参数说明:
    • -fuse-ld=lld 强制调用Clang自带的LLD链接器,避免默认调用MSVC的link.exe
    • -target x86_64-pc-windows-msvc 指定目标为64位Windows MSVC平台,匹配你当前汇编代码的COFF格式和Kernel32.lib的格式
    • 你的汇编代码中已经通过.drectve段指定了/DEFAULTLIB:kernel32.lib,无需额外手动链接kernel32库
Linux交叉编译Windows可执行文件方案

你之前的报错是因为x86_64-windows-gnu目标默认会链接MinGW运行时库,你没有对应依赖导致报错,添加-nostdlib参数跳过默认库链接即可:

clang my.s --target=x86_64-windows-gnu -fuse-ld=lld "-L/run/media/eric/win10/Program Files (x86)/Windows Kits/10/Lib/10.0.20348.0/um/x64/" -lkernel32 -nostdlib -Wl,--entry=main -o my.exe
  • 额外参数说明:
    • -nostdlib 跳过C运行时等默认库的链接,你直接调用Windows系统API无需这些依赖
    • -Wl,--entry=main 给链接器传递入口点参数,指定main为程序入口
    • -lkernel32 手动链接Kernel32.lib,交叉编译场景下.drectve段的默认库声明不会自动生效,需手动指定
常见错误排查

如果仍然出现unknown file type报错,先检查目标文件格式:

  • Windows环境执行file my.o,输出应为COFF object file x86-64, for MS Windows
  • 如果输出为ELF格式,说明汇编阶段没有指定正确target,编译目标文件时需添加参数:
    clang -c my.s --target=x86_64-pc-windows-msvc
    

内容的提问来源于stack exchange,提问作者Eric Stotch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:06:03