저는 Assembly in x86에서 프로그래밍을 시작하고 있습니다. 저는 리눅스 가상 머신에서 가스를 사용하여 컴파일하고 있습니다.x86 linux에서 gas를 사용하는 어셈블리 : 'main'의 다중 정의
메인 루틴이 프로그램을 즉시 종료하는 간단한 빈 프로그램을 실행하려고합니다. 이것이 제가 따라하는 가이드의 첫 번째 임무입니다. 내 코드는 파일 hello.s에 저장하고이처럼 보이는 :
gcc -o hello.o hello.s -no-pie ./hello.s
I을 : 나는 파일의 디렉토리로 이동하여 다음과 같이 그것을 실행하려고 터미널에서
.global main
main:
movq %rsp, %rbp
mov $0, %rdi
call exit
오류 메시지가 표시됩니다.
/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
이 오류의 의미는 무엇이며이를 수정하는 방법은 무엇입니까? 미리 감사드립니다.
글쎄, 나는 그 문법의 팬이 아니기 때문에 나는 가스를 사용하지 않고 속도를 최대화 할 수는 없지만 잠재적으로 2 주요 레이블이 있습니다 ... 그 중 하나를 제거하면 어떻게됩니까? –
문제는 컴파일러에'hello.s'를 두 번 전달하여 두 번 어셈블하고 두 번 사용하여 바이너리를 생성하여 관찰 한 중복 심볼 오류가 발생한다는 것입니다. – fuz