主题 : linux下汇编文件生成动态链接库,请问如何调用汇编函数? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7762
精华: 0
发帖: 8
金钱: 80 两
威望: 80 点
综合积分: 16 分
注册时间: 2009-07-27
最后登录: 2017-09-13
楼主  发表于: 2009-07-27 21:45

 linux下汇编文件生成动态链接库,请问如何调用汇编函数?

本人在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);

}
级别: 新手上路
UID: 7366
精华: 0
发帖: 45
金钱: 450 两
威望: 440 点
综合积分: 90 分
注册时间: 2009-07-12
最后登录: 2010-07-15
1楼  发表于: 2009-08-04 17:53
汇编模块要做成一个函数的样子

至少要有寄存器保护、堆栈保护吧

就算那些都没有,代码执行完之后至少要用RET返回吧
级别: 新手上路
UID: 7366
精华: 0
发帖: 45
金钱: 450 两
威望: 440 点
综合积分: 90 分
注册时间: 2009-07-12
最后登录: 2010-07-15
2楼  发表于: 2009-08-04 17:55
x86 下是这样写的

_lable PROC FAR

  push ebp
  mov  ebp, esp
  push esp

  push eax
......
  pop eax

  pop esp
  pop ebp
  ret
_lable PEND