在尝试设置 Visual Studio 2019 来编译 .asm 项目时,出现错误。
我创建了一个空的 c++ 项目并添加了一个Main.asm
文件。我尝试了 MASM 和 NASM 并得到相同的错误:
LNK1104 cannot open file 'C:\Users\Serge Fonville\source\repos\NASM\x64\Debug\Main.obj'
NASM 和 MASM 都产生相同的错误。提到的.obj
文件也不存在于该位置。手动编译时,它可以正常工作。
我按照我能找到的所有指南进行设置,但无济于事。
我在尝试之间删除并重新安装了所有内容。
最初我认为它与 MASM(我首先尝试过)有关,但由于 NASM 给出了相同的错误,所以在我看来它是另外一回事。不幸的是,我不知道是什么。
在编译之前,我验证了适用汇编程序的构建扩展已启用,并且 .asm 文件具有相应的项目类型。
任何帮助是极大的赞赏。
作为参考,我尝试编译的 .asm (NASM):来自https://cs.lmu.edu/~ray/notes/nasmtutorial/
; ----------------------------------------------------------------------------------------
; 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
为文件
C:\Users\Serge Fonville>dir /s /b c:\main.obj
c:\VTRoot\HarddiskVolume3\Users\Serge Fonville\source\repos\NASM\NASM\x64\Debug\Main.obj