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

MSVC Linker无法找到NASM生成目标文件中的Entry入口点求助

NASM汇编目标文件兼容GoLink但无法被MSVC链接器识别的问题与解决

问题描述

我正在进行汇编编程实验,编写了如下简单程序:

extern ExitProcess

segment Main

Entry:

push 0
call ExitProcess

使用NASM汇编:

nasm.exe -f win64 -o Entry.obj Entry.asm

编译成功后,用MSVC链接器链接:

link.exe /subsystem:console /entry:Entry /out:Test.exe Entry.obj kernel32.lib

出现错误:

LINK : error LNK2001: unresolved external symbol Entry

确认已定义入口点但无法排查原因,改用GoLink链接:

GoLink.exe /console /entry Entry /fo Test.exe Entry.obj

链接成功。

原因分析

  • 符号可见性差异:NASM生成Win64格式的COFF目标文件时,默认段内标签(如Entry)是局部符号,仅在当前段内可见,不会导出为全局符号。MSVC的link.exe严格遵循COFF规范,只会查找全局可见的符号,因此无法识别未导出的Entry。
  • GoLink的宽松规则:GoLink对符号查找的兼容性处理更灵活,即使是局部符号也能被识别为入口点,因此可以成功链接。

解决方法

修改汇编代码,添加global Entry声明,明确将Entry标记为全局可见符号:

global Entry
extern ExitProcess

segment Main

Entry:

push 0
call ExitProcess

重新用NASM汇编后,再使用MSVC的link.exe链接即可成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:42:02