使用swig在python中调用C++
2024-10-13 02:48:24
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)
最新文章
- android学习之路--------intent
- jQuery - 4.简单选择器
- UE编辑器FTP无法连接
- [技术分享] .NET下 , 上传图片的处理方式 , 贴上代码 .
- NUnitForms 测试GUI应用程序的优秀工具
- oracle 子查询因子化 浅谈(with的使用)
- HDU-4742 Pinball Game 3D 三维LIS
- C++类的成员函数(在类外定义成员函数、inline成员函数)
- MySQL InnoDB存储引擎undo redo解析
- [CSS备忘] css3零散
- ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统
- 从DDD开始说起
- 【一天一道LeetCode】#85. Maximal Rectangle
- Java核心技术及面试指南的视频讲解和代码下载位置
- js设置radio单选框值选中
- Chrome 离线安装插件的办法
- Roller5.0.3安装配置部署 step by step
- 初试 Kubernetes 集群中使用 Traefik 反向代理
- Git push remote rejected {change ### closed}
- 设计模式 笔记 桥接模式 Bridge
热门文章
- spring boot flyway 配置说明(摘抄)
- Zipkin 知识点
- 【转】Linux下tcp连接断开后不释放的解决办法
- 前端性能----TCP协议
- sparkjob的提交流程
- dotnet core linux 接入支付宝H5支付,提示:System.PlatformNotSupportedException";,";Message";:";'CspParameters' requires Windows Cryptographic API (CAPI), which is not available on this platform.
- [转载]sql server死锁
- UFUN函数UF_MODL UF_DISP UF_OBJ(name_switch) ( UF_DISP_ask_name_display_status、UF_DISP_set_name_display_status)
- 寄存器,移位寄存器的电路原理以及verilog代码实现
- 【CF1142B】Lynyrd Skynyrd