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)
感谢您的时间.我一直试图弄清楚这几个小时,所以我感谢任何帮助.
我相信,对于GCC,您将要删除_汇编程序文件中的内容.所以这些线:
.global _addnumbersinAssembly
_addnumbersinAssembly:
Run Code Online (Sandbox Code Playgroud)
应该:
.global addnumbersinAssembly
addnumbersinAssembly:
Run Code Online (Sandbox Code Playgroud)
有关此问题的更多信息,请参阅此StackOverflow 问题/答案.
将-m32需要编译参数,因为你的汇编代码需要重写以支持一些64位运算.在你的情况下,它是堆栈操作.在-Wall不需要进行编译,但它并打开更多的警告.
| 归档时间: |
|
| 查看次数: |
8135 次 |
| 最近记录: |