LINUX.ORG.RU

Как правильно собирать код с include'ами в nasm?

 , , ,


1

2

Добрый день. У нас началось изучение assembler на примере nasm. Есть хорошая IDE под названием SASM, в её составе также идёт «библиотека» io.inc (подробнее тут: https://dman95.github.io/SASM/). Мне было бы привычнее писать в vim, но я сталкиваюсь с проблемой при попытке получить программу с подключённой io.inc. Мой код:

%include 'io.inc'

section .text
    global CMAIN
CMAIN:
    ...
    ...

    PRINT_DEC 4, eax
    PRINT_DEC 4, ebx

    xor eax,eax
    RET
, макрос PRINT_DEC определён в io.inc. При сборке через SASM всё хорошо (вот окно настроек с его опциями сборки: https://i.imgur.com/QT8Jmme.png). Я пытаюсь сделать следующее: положил io.inc туда же, где файл с кодом,
nasm -g -f elf32 1.asm -o 1.o
nasm -g -f elf32 io.inc -o io.o
gcc 1.o io.o -g -o 1 -m32
Получаю ошибки:
1.o:1.asm:21: undefined reference to `get_stdout'
1.o:1.asm:22: undefined reference to `get_stdout'
collect2: error: ld returned 1 exit status
21 и 22 - строки с PRINT_DEC. Подскажите, пожалуйста, что я делаю не так, и как надо. Заранее спасибо.

★★

Последнее исправление: Norong (всего исправлений: 1)

Запусти свою ide под strace -ff -e execve -s 1024 и посмотри, что и с какими параметрами она запускает.

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Увидел, что туда ещё компонуется объектный файл одного сишного исходника. Добавил, заработало. Спасибо!

Norong ★★
() автор топика

Есть хорошая IDE...

Скрипач не нужен.

Redf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.