Я пытаюсь создать файл dylib из объектов, собранных с помощью NASM, но получаю следующую ошибку:
ld: недопустимое перемещение текста в 'newline' в objects / ft_puts.o из '_ft_puts' в objects / ft_puts.o для архитектуры x86_64
Вот мой ft_puts.s
:
SYS_WRITE equ 0x2000004
STDOUT equ 1
section .data
newline db 10
section .text
global _ft_puts
_ft_puts:
push rbp
mov rbp, rsp
mov rdx, rdi ; save address of str to print
; calculate len of string pointed by rdi
mov rcx, -1
xor rax, rax
repnz scasb
not rcx
push rcx ; save string length (+1 for the '\n' to add)
dec rcx
; print the string
mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, rdx
mov rdx, rcx
syscall
; print the \n
mov rax, SYS_WRITE
mov rsi, newline
mov rdx, 1
syscall
pop rax
return:
pop rbp
ret
и вот мой make-файл:
$(LIB): $(OBJECTS)
gcc -dynamiclib -o $@ $(addprefix $(OBJECTS_D), $^)
# ranlib $@
%.o: $(SOURCES_D)%.s
$(NASM) $^ -o $(OBJECTS_D)$@
Я нахожусь на macOS Sierra 10.12.6, NASM версия 2.13.03.
Я не знаю, как это исправить, так что если кто-то может помочь, а также объяснить, откуда эта ошибка?
Спасибо.