无法用gcc编译asm hello world
Can't compile asm hello world with gcc
这是hello.s
中的代码
.data
hello_str:
.string "Hello, world!\n"
.set hello_str_length, . - hello_str - 1
.text
.globl main
.type main, @function
main:
movl , %eax
movl , %ebx
movl $hello_str, %ecx
movl $hello_str_length, %edx
int [=10=]x80
movl , %eax
movl [=10=], %ebx
int [=10=]x80
.size main, . - main
I 运行 gcc hello.s -o hello 并得到这个错误:
/usr/bin/ld: /tmp/cc6ILJpd.o: relocation R_X86_64_32 against '.data' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2:错误:ld 返回了 1 个退出状态
然后我尝试了 运行ning gcc hello.s -fPIC -o hello,但它没有做任何事情,错误是相同的。
我做错了什么? Ubuntu 17.04,海湾合作委员会 6.3.0。
您正在尝试在 amd64 模式下编译 i386 代码,但这不起作用。试试这个:
gcc -m32 hellos. -o hello
...强制 i386 模式。
编辑: 我认出了这一点,因为我知道 i386 和 amd64 代码是什么样的,但更好的线索是重定位名称 R_X86_64_32
。 X86_64 是 amd64 架构的别称;所以这就是说,它是 X86_64 架构的 32 位重定位。鉴于您没有为该架构编写代码,这是一个合理的迹象,表明它是错误的编译器。
这是hello.s
中的代码.data
hello_str:
.string "Hello, world!\n"
.set hello_str_length, . - hello_str - 1
.text
.globl main
.type main, @function
main:
movl , %eax
movl , %ebx
movl $hello_str, %ecx
movl $hello_str_length, %edx
int [=10=]x80
movl , %eax
movl [=10=], %ebx
int [=10=]x80
.size main, . - main
I 运行 gcc hello.s -o hello 并得到这个错误:
/usr/bin/ld: /tmp/cc6ILJpd.o: relocation R_X86_64_32 against '.data' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2:错误:ld 返回了 1 个退出状态
然后我尝试了 运行ning gcc hello.s -fPIC -o hello,但它没有做任何事情,错误是相同的。
我做错了什么? Ubuntu 17.04,海湾合作委员会 6.3.0。
您正在尝试在 amd64 模式下编译 i386 代码,但这不起作用。试试这个:
gcc -m32 hellos. -o hello
...强制 i386 模式。
编辑: 我认出了这一点,因为我知道 i386 和 amd64 代码是什么样的,但更好的线索是重定位名称 R_X86_64_32
。 X86_64 是 amd64 架构的别称;所以这就是说,它是 X86_64 架构的 32 位重定位。鉴于您没有为该架构编写代码,这是一个合理的迹象,表明它是错误的编译器。