Связать nasm с ld.компоновщик lld

#linker #llvm #nasm #libc

#компоновщик #llvm #nasm #libc

Вопрос:

У меня есть файл main.s.

 extern printf
extern exit

section .data
  fmt: db "hi!", 0xa

section .text
global _start
_start:
  mov rax, 0
  mov rdi, fmt
  call printf
  call exit
  

Скомпилировать и запустить

 $ yasm -f elf64 main.s -o main.o
$ ld.lld main.o -o main --dynamic-linker /lib/ld-linux-x86-64.so.2
$ ./main
  

Но я получил:

ld.lld: ошибка: неопределенный символ: printf

ld.lld: ошибка: неопределенный символ: выход

в ld.lld нет опции -lc, подобной компоновщику ld.

Ответ №1:

Просто используйте опцию : -L / lib, чтобы указать компоновщику, где найти libc

 ld.lld main.o --dynamic-linker /lib/ld-linux-x86-64.so.2 -o main -L/lib -lc