尝试编译此代码:
global main
extern printf
[section .data]
fmtStr: db "Input string", 0xA, 0
[section .text]
main:
push rbp
push fmtStr
call printf
pop rbp
ret
第一步顺利:
nasm -f elf64 printf.asm -o printf64.o
但是gcc失败了:
gcc printf64.o -o printf64
/ bin / ld:printf64.o:针对`.data'重新定位R_X86_64_32S制作共享对象时不能使用;用-fPIC重新编译
/ bin / ld:最终链接失败:输出中不可表示的部分 collect2:错误:ld返回1退出状态
我有
Linux 4.14.8-1-ARCH x86_64
gcc(GCC)7.2.1 20171128
GNU ld(GNU Binutils)2.29.1