swig步骤说明

准备好需要的文件

  1. demo.h、libdemo.so(研发提供的api .h文件和动态库)
  2. demo.i(自己编写的swig封装说明文件)

通过SWIG进行封装

  1. swig根据demo.i生成demo_wrap.cxx和demo.py两个文件
swig -c++ -python demo.i

2.将上一步产生的demo_wrap.cxx编译为demo_wrap.o文件

g++ -O2 -fPIC -c demo_wrap.cxx -I/usr/local/python3/include/python3.7m/

备注:-I后是python3头文件–Python.h所在路径,如果使用python2,需替换成对应python2头文件的路径。

  1. 将.cpp文件编译成.so文件

(如果有.so文件则此步骤不用,直接进行第4步)

g++ -fpic -shared -o libdemo.so demo.cpp
  1. 将demo_wrap.o再进行编译,并与动态库libdemo.so进行链接,生成可以被python调用的_demo.so
g++ -shared demo_wrap.o -L./ -ldemo -Xlinker -rpath /home/longzhen/1120 -o _demo.so

备注:-rpath后面的参数是libdemo.so所在路径;最后’demo’与.i文件名相同

验证

到这里封装工作已经完成, python直接导入demo模块就可以使用
import demo
调用里面的函数,例如add(),方法为demo.add()

关于.i文件的说明

1、可以把所有类和函数的声明放到.h文件里,还是以dem.h为例,那么.i只需要这样编写,就可以实现文件里所有类和函数的封装。

%module demo
%{
#include "demo.h"
%}
 
%include "demo.h"

2、如果函数参数为指针和数组的话,1中的写法就不满足了,还需要在.i里加上下面的内容

%include "cpointer.i"
%pointer_functions(int,intp);    //针对指针
 
%include "carrays.i"
%array_functions(int, intArray);   //针对数组

详细参考 https://blog.csdn.net/SangoHan77/article/details/79164204

对象作为参数的例子 https://www.xuebuyuan.com/2057564.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值