Skip to main content
 首页 » 编程设计

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

2024年05月06日71zhoujg

我尝试创建一个库并测试它,但发生了错误。
错误代码:

./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已经为该库编制了索引。