具体来说:
我已经编写了一些测试代码,但是它无法正常工作。
#include <stdio.h>
extern int a_add(int a, int b);
int main(){
int fi=5;
int se=7;
int result=a_add(fi, se);
printf("result is %d", result);
return 0;
}
然后是汇编代码。(a_add.S)
.section .text
.globl a_add
a_add:
add x3,x1,x0
mov x0,x3
br x30
有人知道我如何修复这两个文件以使a_add函数起作用? 我还没有尝试过.asm文件。
如果我在表达上有失误,请多多帮助,请原谅,但我希望我的问题很清楚。
答案 0 :(得分:0)
我通过使用外部字符“ C”修复了代码,并解决了该问题。只需声明main.cpp或main.c
中的以下函数即可extern "C" {int a_add(int a, int b);}
用“ C”替换旧的“ extern”行。 如果编译器是针对C ++代码而不是C代码的,这将很有帮助,基本上是通过让函数以C代码而不是C ++代码的方式进行编译。
我还没有做过这样的测试,但是我想如果编译器是C编译器,就不会有这样的问题。
答案 1 :(得分:0)
main.c
#include<stdio.h>
extern int a_add(int, int);
int main() {
int a = 5;
int b = 3;
printf("%d + %d = %d \n", a, b, a_add(a, b));
}
add.s
.text
.global a_add
a_add:
add w0, w0, w1
ret
在 AArch64 机器(带有 ubuntu 20.04 的 docker 容器)上使用 gcc (9.3.0) 编译,使用:
gcc main.c add.s -o run.exe && ./run.exe
为目标程序集中的所需功能准备好骨架的快速方法是:
int a_add(int a, int b){
return a + b;
}
gcc -S -O2 add.c
注意:使用更高的优化级别可能会产生不太明显的代码。
提示:Compiler Explorer 是在玩程序集时了解的好工具。