汇编程序的gcc链接错误

时间:2018-04-14 06:35:33

标签: gcc assembly linker nasm x86-64

我正在尝试执行一个计算二次方程根的汇编程序。

nasm -f elf64 assgn10.asm
gcc -o assgn10 assgn10.o
  

/ usr / bin / ld:assgn10.o:针对`.bss'重新定位R_X86_64_32S制作共享对象时不能使用;用-fPIC重新编译

     

/ usr / bin / ld:最终链接失败:输出中不可代表的部分

     

collect2:错误:ld返回1退出状态

我使用了2个宏。

%macro myprintf 1
mov rdi,formatpf
sub rsp,8
movsd xmm0,[%1]
mov rax,1
call printf
add rsp,8
syscall
%endmacro

%macro myscanf 1
mov rdi,formatsf
mov rax,0
mov rsi,qword[%1]
call scanf
;syscall
%endmacro

这就是我的.bss部分的外观。

section .bss

a resq 1
b resq 1
c resq 1
b2 resq 1 ; b square
fac resq 1 ; 4ac
delta resq 1 ; delta value
rdelta resq 1 ; root of delta
r1 resq 1 ;root 1
r2 resq 1 ;root 2
ta resq 1  ; 2a
realn resq 1
img1 resq 1
img2 resq 1

同一个程序在不同的PC上毫不费力地工作。

1 个答案:

答案 0 :(得分:0)

  

同一个程序在不同的电脑上毫不费力地工作。

您的gcc被配置为默认生成position-independent executablesconfigure --enable-default-pie ...)并且您的程序集与此不兼容。

这应该有效:

gcc -o assgn10 assgn10.o -no-pie