Как линковать с помощью ld?

Автор kol1978, Сегодня в 06:04:25

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kol1978

ПРОГРАММА:
-------------nano abs.s
.globl _start
.text
_start:
movq $-5, %rdi   # параметр для функции abs
call abs         # вызываем функцию библиотечную ф. Си abs
movq %rax, %rdi  # передаем результат abs как параметр системного вызова exit (статус завершения)
movq $60, %rax   # выход - запуск системного вызова exit
syscall
--------------------------
компилируется:
as abs.s -o abs.o
ld abs.o -static -lc -o abs
посмотреть результат:
./abs
echo $?

Но, ПРОГРАММА:
---------------------------nano puts.S
.global main
.data
message: .asciz "Hola, mundo"
.text
main: # вызываем функцию библиотечную ф. Си puts
subq $8, %rsp            # выравнивание должно быть по 16 байтам - нужно библиотечным ф.
leaq message(%rip), %rax # получить адрес ссылки на выводимую строку
movq %rax, %rdi          # параметр для функции puts(указатель на строку)
call puts                 
addq $8, %rsp
movq $60, %rax           # выход - запуск системного вызова exit
syscall
------------------------------------------------------
таким же образом не компилируется..., а только так:
gcc puts.S -o puts
Объясните почему? и как такую прогу линковать с помощью ld?