本人在linux平台下利用交叉编译器3.3.2,生成汇编程序“addtest.s”的动态链接库:
#arm-linux-g++ -fPIC -o addtest.o -c addtest.c
#arm-linux-g++ -shared -o libaddtest.so addtest.o
然后编译“test.cpp”文件,测试汇编函数ass_add,
#arm-linux-g++ -o test test.cpp libaddtest.so
运行上面的测试编译命令,出现如下错误:"/usr/local/arm/3.3.2/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld:warning :type and size of dynamic symbol ‘ass_add’are not defined"
然后我在mini2440开发板上运行"./test", 显示段错误
//assemble file "addtest.s"
.section .text
.global ass_add
ass_add:
ADD r0, r0, r1
MOV pc, lr
//main file "test.cpp"
#include <stdio.h>
extern "C"
{
unsigned int ass_add(unsigned int p,unsigned int q);
}
int main()
{
int a;
a=ass_add(5,10);
printf("a is %u\n",a);
}