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

VS2019编译ASM项目报LNK1104无法打开Main.obj错误求助

VS2019编译.asm项目LNK1104报错问题

问题描述

在配置Visual Studio 2019编译.asm项目时遇到报错,创建空C++项目并添加Main.asm文件,尝试使用MASM和NASM编译均出现相同错误:

LNK1104 cannot open file 'C:\Users\Serge Fonville\source\repos\NASM\x64\Debug\Main.obj'

对应路径下不存在目标.obj文件,但手动编译可正常运行,已确认汇编器生成扩展已启用、.asm文件设置了对应项类型,重装组件和参照公开配置教程均无法解决问题。

参考代码

NASM代码

; ----------------------------------------------------------------------------------------
; This is a Win64 console program that writes "Hello" on one line and then exits.  It
; uses puts from the C library.  To assemble and run:
;
;     nasm -fwin64 hello.asm && gcc hello.obj && a
; ----------------------------------------------------------------------------------------

        global  main
        extern  puts
        section .text
main:
        sub     rsp, 28h                        ; Reserve the shadow space
        mov     rcx, message                    ; First argument is address of message
        call    puts                            ; puts(message)
        add     rsp, 28h                        ; Remove shadow space
        ret
message:
        db      'Hello', 0                      ; C strings need a zero byte at the end

MASM代码

;Descr  : My First 64-bit MASM program
;ml64 prog.asm /c
;golink /console /entry main prog.obj msvcrt.dll, or
;gcc -m64 prog.obj -o prog.exe (main/ret). This needs 64-bit GCC.
;-----------------------------------
extrn printf:proc
extrn exit:proc

.data
hello db 'Hello 64-bit world!',0ah,0

.code
main proc

        mov     rcx,offset hello
        sub     rsp,20h
        call    printf
        add     rsp,20h

        mov     rcx,0
        call    exit

main endp
end

编译输出

Rebuild started...
1>------ Rebuild All started: Project: NASM, Configuration: Debug x64 ------
1>LINK : fatal error LNK1104: cannot open file 'x64\Debug\Main.obj'
1>Done building project "NASM.vcxproj" -- FAILED.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

文件检索结果

执行dir /s /b c:\main.obj结果如下:

c:\VTRoot\HarddiskVolume3\Users\Serge Fonville\source\repos\NASM\NASM\x64\Debug\Main.obj

解决方案

核心根因定位

  1. 输出路径不匹配:VS链接器预期读取的路径比汇编器实际生成的路径少了一层NASM子目录,导致链接时找不到目标文件
  2. 安全软件沙箱重定向:路径前缀的VTRoot\HarddiskVolume3是安全软件(多为Symantec、企业版杀毒软件)的沙箱隔离机制,汇编器输出的文件被重定向到虚拟隔离目录,VS链接器无权限读取该路径下的文件

修复步骤

  • 修正项目输出配置
    右键项目打开「属性」面板,切换到当前使用的Debug x64配置:
    • 进入「常规」选项卡,确认「输出目录」设置为$(SolutionDir)$(Platform)\$(Configuration)\,「中间目录」设置为$(Platform)\$(Configuration)\
    • 右键Main.asm文件打开属性,确认「项类型」和所用汇编器对应:MASM选Microsoft Macro Assembler,NASM选对应扩展注册的项类型
    • 进入汇编器的「输出文件」设置页,将目标文件名配置为$(IntDir)%(FileName).obj,强制obj文件输出到VS预期的中间目录
  • 排除安全软件干扰
    临时关闭安全软件的实时防护/沙箱功能,或者将整个项目目录加入安全软件白名单,避免生成的文件被重定向到虚拟隔离路径
  • 规避特殊路径字符
    可尝试将项目迁移到不带空格、中文的路径下(例如C:\Repos\ASMTest),排除部分旧版汇编器处理特殊路径的兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:45:04