Архив не имеет индекса; запустите ranlib, чтобы добавить его (при связывании с .a, содержащим объектный файл MachO64 в Linux) - PullRequest
3 голосов
/ 20 марта 2020

Я пытался создать библиотеку и протестировать ее, но произошла ошибка.
код ошибки:

./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.
Что я делать не так?

1 Ответ

2 голосов
/ 20 марта 2020

Создание объектных файлов для операционной системы на основе Linux (или, возможно, более правильно, и системы ELF64) с помощью nasm -f elf64 ft_strlen.s -o ft_strlen.o

Для получения дополнительной информации nasm -hf для просмотра всех допустимых форматов вывода для nasm -f

Небольшой совет: команда ranlib не нужна, поскольку ar s уже индексирует библиотеку.

...