我开始在x86中使用Assembly编程,我正在遵循指南。我正在使用gas在linux虚拟机上编译。
我正在尝试运行一个简单的空程序,其中主程序立即退出程序。这是我正在遵循的指南中的第一项任务。我的代码保存在文件hello.s中,它看起来像这样:
.global main
main:
movq %rsp, %rbp
mov $0, %rdi
call exit
在终端中,我导航到该文件的目录并尝试运行它:
gcc -o hello.o hello.s -no-pie ./hello.s
我收到错误说:
/tmp/cc62hr1F.o: In function 'main':
(.text+0x0): multiple definition of 'main'
/tmp/ccwMutY1.o(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
此错误意味着什么以及如何解决?提前谢谢。
答案 0 :(得分:1)
编辑/解决方案:我弄清楚出了什么问题。在终端我应该像这样运行:
gcc -o hello.o hello.s -no-pie
./hello.o
这是两个单独的命令。我把它们写成一行。要运行的文件必须具有扩展名.o not .s