编译汇编文件时出现问题 - 错误:对`function name'的未定义引用

时间:2014-09-26 04:18:00

标签: c assembly compiler-errors

我想看一看我教授给我们的测试程序,但是我在编译时遇到了麻烦。我在Ubuntu 14.04上。我正在用

编译它
gcc -Wall test.c AssemblyFunction.S -m32 -o test

我在64位计算机上运行代码时遇到问题并且读到添加-Wall和-m32将允许它工作。这样做解决了我遇到的第一个问题,但现在我得到了错误:未定义的引用`addnumbersinAssembly'

这是C文件

#include <stdio.h>
#include <stdlib.h>

extern int addnumbersinAssembly(int, int);
int main(void)
{

    int a, b;
    int  res;

    a = 5;
    b = 6;


    // Call the assembly function to add the numbers
    res = addnumbersinAssembly(a,b);
    printf("\nThe sum as computed in assembly is : %d", res);

    return(0);
}

这是汇编文件

.global _addnumbersinAssembly
_addnumbersinAssembly:
    pushl   %ebp
    movl    %esp,%ebp


    movl 8(%ebp), %eax
    addl 12(%ebp), %eax    # Add the args


    movl    %ebp,%esp
    popl    %ebp
    ret

感谢您的时间。我一直在努力解决这个问题几个小时,所以我感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

我相信使用GCC,您将要删除汇编程序文件中的_。所以这些界限:

.global _addnumbersinAssembly
_addnumbersinAssembly:

应该是:

.global addnumbersinAssembly
addnumbersinAssembly:

有关此问题的更多信息,请参阅此StackOverflow question/answer

需要-m32编译参数,因为您需要重写汇编代码以支持某些64位操作。在你的情况下,它是堆栈操作。 -Wall不需要编译,但确实会发出更多警告。