【发布时间】:2014-06-26 08:00:09
【问题描述】:
要从 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++ -o 1c.o 1.cpp 编译 C++ 代码时,得到一个错误
在 main 函数中,未定义对 testfunc() 的引用
为什么即使我将 testfunc() 声明为 extern 也会发生这种情况?
【问题讨论】:
-
您必须将其声明为
extern "C"才能正确修改名称。 -
我使用了以下 extern "C" { void testfunc(void); } 仍然显示同样的错误
-
嗯...也许还有一些其他的名字正在修改?一些编译器在 C 函数名称中添加下划线。编写一个小的 C 程序并查看生成的机器代码可能是最有启发性的。
-
在编写汇编文件时,我总是写一点 C 代码并“复制”编译器的代码……例如arm-none-linux-gnueabi-g++ -S 1.cpp -o 1c.s
-
尝试用 arm-none-linux-gnueabi-g++ -c 1.cpp 编译
标签: c++ linux gcc assembly cross-compiling