@sddvxd

Как соединить программу на ассемблере с программой на C?

Есть программа для линукс, которая содержит функцию для вывода одной буквы в консоль:

global test

section .data
msg db 0xD0, 0xBF, 10
msg_len equ $-msg

section .text
test:   push ebp
        mov ebp, esp

        mov eax, 4
        mov ebx, 1
        mov ecx, msg
        mov edx, msg_len
        int 80h

        mov eax, 1
        mov ebx, 0
        int 80h

        mov esp, ebp
        pop ebp
        ret

И программа на C, которая пытается вызвать подпрограмму test:

extern void test();

int main(){
        test();
}


Выходит 2 объектных файла, которые я пытаюсь слинковать в исполняемый файл:

gcc main.o file.o -m32

Ответ:

main.o: In function main':
main.cpp:(.text+0x1b): undefined reference totest()'

Подскажите пожалуйста - как правильно поступить, чтобы получился исполняемый файл
  • Вопрос задан
  • 302 просмотра
Решения вопроса 1
@sddvxd Автор вопроса
Проблема решена - я компилировал код не на C, а на C++ и редактор связей не мог найти символ. Проблема решилась добавлением extern "C" в код на C++
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы