У меня есть этот простой исходный C-код:Вызов подпрограммы сборки из исходного кода C
#include <stdio.h>
extern int Sum(int,int);
int main()
{
int a,b,s;
a=1 , b=2;
s = Sum(a,b);
return 0;
}
и у меня есть этот s.asm, который определяет функцию _Sum:
global _Sum
_Sum:
push ebp ; create stack frame
mov ebp, esp
mov eax, [ebp+8] ; grab the first argument
mov ecx, [ebp+12] ; grab the second argument
add eax, ecx ; sum the arguments
pop ebp ; restore the base pointer
ret
теперь я компилировалось .asm с помощью:
nasm s.asm -f elf -o s.o
и скомпилирован и связала .c файл с помощью:
gcc s.o test.o -o testapp
это результат:
/tmp/ccpwYHDQ.o: In function `main':
test.c:(.text+0x29): undefined reference to `Sum'
collect2: ld returned 1 exit status
Так что это проблема?
Я использую Ubuntu-Linux
Любая помощь будет принята с благодарностью, спасибо
[РЕШИТЬ]: я проверил с нм файл test.o и ожидал найти символ «Сумма» а не «_Sum», так что это решило проблему.
Сверху моей головы ваш прототип суммы неверен. 'extern int Sum (int, int);' – RageD
Вам, вероятно, нужно поставить 'global _Sum' где-то на стороне asm – harold
Я попробовал' global _Sum' вместо '_Sum', я получил то же сообщение об ошибке @harold – hshihab