我试图从用NASM组装的对象文件创建dylib,但是出现以下错误:
ld:对于架构x86_64,从object / ft_puts.o的'_ft_puts'非法将文本从Objects / ft_puts.o重定向至'newline
这是我的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
这是我的makefile:
$(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中。
我不知道如何解决该问题,因此如果有人可以提供帮助,并解释该错误的出处?
谢谢。