Примечание: я использую этот ответ, чтобы иметь возможность сказать больше, чем это возможно, с помощью замечания и использования gcc.
Во-первых, просто выполнить g++ testing.c
g ++ невозможносвязать с файлом ассемблера, который не указан, поэтому, конечно, helloWorld отсутствует.
Если у меня есть файл hw.c :
int helloWorld()
{
return 123;
}
Я прошу произвести ассемблер с помощью опции -S
(я также использую -O
для уменьшения размера исходного кода на ассемблере), поэтому мне не нужно писать файл на ассемблере вручную, и яуверен, что он совместим с gcc :
/tmp % gcc -O -S hw.c
, который произвел файл hw.s :
/tmp % cat hw.s
.file "hw.c"
.text
.globl helloWorld
.type helloWorld, @function
helloWorld:
.LFB0:
.cfi_startproc
movl $123, %eax
ret
.cfi_endproc
.LFE0:
.size helloWorld, .-helloWorld
.ident "GCC: (GNU) 4.4.7 20120313 (Red Hat 4.4.7-16)"
.section .note.GNU-stack,"",@progbits
/tmp %
Также с файлом mc :
#include <stdio.h>
extern int helloWorld();
int main()
{
printf("%d\n", helloWorld());
return 0;
}
Я могу сделать:
/tmp % gcc m.c hw.s
/tmp % ./a.out
123
Я предлагаю вам сделать то же самое, написать helloWorld в C, а затем сгенерировать ассемблер сопция -S
, при этом вы обязательно соблюдаете требования gcc в определении функции