ld: недопустимое перемещение текста (файлы объектов, собранные с помощью nasm) - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь создать файл 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.
Я не знаю, как это исправить, так что если кто-то может помочь, а также объяснить, откуда эта ошибка? Спасибо.

...