存档没有索引; 运行 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
已经在索引库。
我尝试创建一个库并对其进行测试,但出现错误。
错误代码:
./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
更多信息 nasm -hf
查看 nasm -f
小提示:不需要 ranlib
命令,因为 ar s
已经在索引库。