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

Lur*_*Dog 3 c assembly compiler-errors

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

gcc -Wall test.c AssemblyFunction.S -m32 -o test
Run Code Online (Sandbox Code Playgroud)

我在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);
}
Run Code Online (Sandbox Code Playgroud)

这是汇编文件

.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
Run Code Online (Sandbox Code Playgroud)

感谢您的时间.我一直试图弄清楚这几个小时,所以我感谢任何帮助.

Mic*_*tch 5

我相信,对于GCC,您将要删除_汇编程序文件中的内容.所以这些线:

.global _addnumbersinAssembly
_addnumbersinAssembly:
Run Code Online (Sandbox Code Playgroud)

应该:

.global addnumbersinAssembly
addnumbersinAssembly:
Run Code Online (Sandbox Code Playgroud)

有关此问题的更多信息,请参阅此StackOverflow 问题/答案.

-m32需要编译参数,因为你的汇编代码需要重写以支持一些64位运算.在你的情况下,它是堆栈操作.在-Wall不需要进行编译,但它并打开更多的警告.