x86在linux上使用gas组装:'main'的多个定义

时间:2017-12-08 21:23:53

标签: linux assembly x86 gas

我开始在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

此错误意味着什么以及如何解决?提前谢谢。

1 个答案:

答案 0 :(得分:1)

编辑/解决方案:我弄清楚出了什么问题。在终端我应该像这样运行:

gcc -o hello.o hello.s -no-pie
./hello.o

这是两个单独的命令。我把它们写成一行。要运行的文件必须具有扩展名.o not .s