存档没有索引; 运行 ranlib 添加一个(在 Linux 上链接包含 MachO64 目标文件的 .a 时)

Archive has no index; run ranlib to add one (when linking with a .a containing a MachO64 object file on Linux)

我尝试创建一个库并对其进行测试,但出现错误。
错误代码:

./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));
}

我正在使用 ubuntu 安装在 wsl 上。
我做错了什么?

使用 nasm -f elf64 ft_strlen.s -o ft_strlen.o

为基于 Linux 的操作系统(或者更准确地说,和 ELF64 系统)生成目标文件

更多信息 nasm -hf 查看 nasm -f

的所有有效输出格式

小提示:不需要 ranlib 命令,因为 ar s 已经在索引库。