无法链接程序集和c

时间:2013-05-19 15:03:30

标签: c assembly linker

我在链接c和汇编代码时遇到问题。试图搜索一些解决方案,但我找不到任何解决方案。

c file “l3.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;
}

和asembly“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中,我得到了以下行(最近的解决方案我用Google搜索):

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);。我该如何链接?

1 个答案:

答案 0 :(得分:3)

看起来您没有将mult导出为符号,因此链接器以后无法找到它。如何正确地取决于你正在使用的汇编程序。由于您使用的是AT&amp; T语法,我将猜测GNU为 - 在这种情况下,只需在汇编文件的顶部添加.global mult