1、安装swig

下载链接: http://www.swig.org/survey.html

tar   -xvf   swig-3.0..tar.gz
./configure  --prefix=/usr/localswig(此处指定安装目录,不指定默认直接默认系统路径)
make && make install

注意:如果在第二步中不成功,可能是没有安装pcre库,安装pcre步骤如下:

pcre下载链接:http://www.pcre.org/

tar -xzvf pcre-8.21.tar.gz
cd pcre-8.21
./configure && make && make install

之后,再来测试swig是否安装成功,使用下面语句:

swig -version

可能会报“找不到libpcre.so.1的错误”,解决办法如下,建立软连接:

sudo ln -s /pcre-8.21/.libs/libpcre.so.0.0. /usr/lib/libpcre.so.

2、建立接口

以一个简单的小程序为例:

(1)编辑头文件和源文件

//mytest.h
int add(int a,int b); int sub(int a,int b);
 //test.cpp
int add(int a, int b){ return a+ b;}
int sub(int a,int b){ return a - b;}

(2)编辑对应的.i文件

//%module 后面的名字是被封装的模块名称。封装口,python通过这个名称加载程序
//%{  %}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。 //最后一部分,声明了要封装的函数和变量,直接使用%include 文件模块头文件直接包含即可   //file mytest.i     %module  mytest     %{       #define SWIG_WITH_INIT       #include "mytest.h"    %}    %include "mytest.h  "

(3)执行命令编辑.i文件

swig    -python    -c++    mytest.i

执行完成之后会生成对应的文件: 模块名_warp.cxx(这里就是mytest_warp.cxx)

(4)编写setup.py文件

from distutils.core import setup
from distutils.extension import Extension test_module = Extension('_mytest', sources=['mytest_wrap.cxx', 'mytest.cpp'],) setup(name = 'mytest',
version = '0.1',
author = 'SWIG Docs',
description = 'Simple swig pht from docs',
ext_modules = [test_module],
py_modules = ['mytest']

执行该setup.py文件

python setup.py build

执行完之后会在同级目录的build文件夹的lib文件夹下生成对应的.so文件和mytest.py文件;

之后要注意:要在这个目录下编写调用这个C++模块的py脚本!!!因为执行完setup.py之后在setup.py的同级目录下也会生成一个mytest.py文件,但没有对应的.so文件,直接在这个里面编写py脚本进行调用的话会由于没有动态链接库而报错!!!

(5)编写python脚本调用C++

import mytest

a = mytest.add(1, 2)
print(a) b = mytest.sub(2, 1)
print(b)

最新文章

  1. android学习之路--------intent
  2. jQuery - 4.简单选择器
  3. UE编辑器FTP无法连接
  4. [技术分享] .NET下 , 上传图片的处理方式 , 贴上代码 .
  5. NUnitForms 测试GUI应用程序的优秀工具
  6. oracle 子查询因子化 浅谈(with的使用)
  7. HDU-4742 Pinball Game 3D 三维LIS
  8. C++类的成员函数(在类外定义成员函数、inline成员函数)
  9. MySQL InnoDB存储引擎undo redo解析
  10. [CSS备忘] css3零散
  11. ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统
  12. 从DDD开始说起
  13. 【一天一道LeetCode】#85. Maximal Rectangle
  14. Java核心技术及面试指南的视频讲解和代码下载位置
  15. js设置radio单选框值选中
  16. Chrome 离线安装插件的办法
  17. Roller5.0.3安装配置部署 step by step
  18. 初试 Kubernetes 集群中使用 Traefik 反向代理
  19. Git push remote rejected {change ### closed}
  20. 设计模式 笔记 桥接模式 Bridge

热门文章

  1. spring boot flyway 配置说明(摘抄)
  2. Zipkin 知识点
  3. 【转】Linux下tcp连接断开后不释放的解决办法
  4. 前端性能----TCP协议
  5. sparkjob的提交流程
  6. dotnet core linux 接入支付宝H5支付,提示:System.PlatformNotSupportedException","Message":"'CspParameters' requires Windows Cryptographic API (CAPI), which is not available on this platform.
  7. [转载]sql server死锁
  8. UFUN函数UF_MODL UF_DISP UF_OBJ(name_switch) ( UF_DISP_ask_name_display_status、UF_DISP_set_name_display_status)
  9. 寄存器,移位寄存器的电路原理以及verilog代码实现
  10. 【CF1142B】Lynyrd Skynyrd