汇编函数将从c ++程序中调用
我的简单汇编代码是(1.s)
.align 4
.code 32
.globl testfunc
.func
testfunc:
bx lr
.endfunc
.end
C ++代码是(1.cpp)
#include <stdio.h>
#include <stdlib.h>
extern "C"
{
void testfunc(void);
}
int main()
{
testfunc();
printf("completed\n");
return 0;
}
我使用arm-none-linux-gnueabi-as -o 1.o 1.s编译了汇编代码
使用arm-none-linux-gnueabi-g ++编译C ++代码时-o 1c.o 1.cpp出现以下错误
在函数main中,未定义对testfunc()的引用
为什么即使我将testfunc()声明为extern,也为什么会发生这种情况?
最佳答案
如果编译参数列表采用以下形式:
arm-none-linux-gnueabi-g++ -o 1c.o 1.cpp
这意味着使用1.cpp进行操作以获取目标文件作为输出。我不确定该怎么做,但在您的情况下,它也可以与链接一起使用。
当它以这种形式
arm-none-linux-gnueabi-g++ -c 1.cpp
这意味着明确地仅对文件1.cpp进行编译。没有联系和解决依赖
如果链接有问题
在那之后使用
objdump -T
在两个.o文件中,并检查函数名称是否相同。下划线可能存在一些问题,某些编译器添加了一些下划线
检查您的函数是否使用下划线编译,以及是否未在汇编代码中手动添加
关于c++ - 未定义对 assembly 函数的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24425307/