我有链接c和汇编代码的问题。我试着寻找一些解决方案,但没有一个适合我。
c文件" 13 .c"看起来像这样:
#include <stdio.h>
#include <stdlib.h>
const int INP_SIZE = 100;
extern int mult(int c1, int c2);
int main()
{
char number[INP_SIZE];
scanf("%s",number);
printf("You typed: %s n",number);
int j=2;
int k=5;
j = mult(j,k); #here is the problem
printf("%d",j);
scanf("%s",number);
return 0;
}
和汇编"mult "。S "像这样:
.type mult, @function
mult:
push %rbp
mov %rsp, %rbp
mov 8(%rbp), %rbx
mov 12(%rbp), %rcx
mov $0, %rax
add %rbx, %rax;
add %rcx, %rax;
mov %rbp, %rsp
pop %rbp
ret
在我的makefile中,我得到了以下行(我搜索的最新解决方案):
l3:
as -g -o mult.o mult.s
gcc -o l3.o -c l3.c
gcc l3.o mult.o
当我在控制台中键入make时,它抛出:undefined reference to 'mult'
当我注释//j = mult(j,k);
程序工作正常时。我该如何把这些联系起来呢?
看起来您没有将mult
导出为符号,因此链接器稍后无法找到它。如何正确地做到这一点取决于您使用的汇编程序。由于您使用的是AT&T语法,所以我猜GNU是——在这种情况下,只需在汇编文件的顶部添加.global mult
即可。