我尝试创建一个库并测试它,但发生了错误。
错误代码:
./libasm.a: error adding symbols: Archive has no index; run ranlib to add one
collect2: error: ld returned 1 exit status
我是这样编译的。
nasm -f macho64 ft_strlen.s -o ft_strlen.o
ar rcs libasm.a ft_strlen.o
ranlib libasm.a
gcc main.c libasm.a
下面是源文件
;ft_strlen.s
segment .text
global ft_strlen
ft_strlen:
mov rax, 0
jmp count
count:
cmp BYTE [rdi + rax], 0
je exit
inc rax
jmp count
exit:
ret
/*main.c*/
#include <stdio.h>
int ft_strlen(char *str);
int main(void)
{
char *str = "hello world";
printf("%d \n", ft_strlen(str));
}
我正在使用安装在 wsl 上的 ubuntu。
我做错了什么?
请您参考如下方法:
使用 nasm -f elf64 ft_strlen.s -o ft_strlen.o
为基于 Linux 的操作系统(或者更准确地说,ELF64 系统)生成目标文件
了解更多信息nasm -hf
查看 nasm -f
的所有有效输出格式
小提示:ranlib
不需要命令,因为 ar s
已经为该库编制了索引。