Нет необходимости в stati c библиотеках - вы можете объявить функцию как внешнюю. В вашем случае main.asm
будет выглядеть следующим образом:
; ---- main.asm ----
section .text
global _start
extern dummy_func
_start:
call dummy_func
mov rax, 0x3c
mov rdx, 0x0
syscall
Затем скомпилируйте ваши исходные файлы в объектные файлы:
nasm main.asm -o main.o
nasm header.asm -o header.o
Затем вы, наконец, сможете использовать ld для связи двух объектных файлов в один исполняемый файл:
ld -o [desired executable name] main.o header.o
Ключевое слово extern
в основном означает, что функция dummy_func
находится в другом объектном файле, и что объектный файл, содержащий dummy_func
, ДОЛЖЕН быть связан с исполняемым файлом в конец. Это гораздо лучший способ, чем использовать %include
.