使用swig在python中调用C++
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)
使用swig在python中调用C++的更多相关文章
- 如何在python中调用C语言代码
1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写的函数-ctypes,SWIG,Python/ ...
- Python脚本传參和Python中调用mysqldump
Python脚本传參和Python中调用mysqldump<pre name="code" class="python">#coding=utf-8 ...
- Django之在Python中调用Django环境
Django之在Python中调用Django环境 新建一个py文件,在其中写下如下代码: import os if __name__ == '__main__': os.environ.setdef ...
- (转)python中调用R语言通过rpy2 进行交互安装配置详解
python中调用R语言通过rpy2 进行交互安装配置详解(R_USER.R_HOME配置) 2018年11月08日 10:00:11 luqin_ 阅读数:753 python中调用R语言通过r ...
- Python中调用自然语言处理工具HanLP手记
手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...
- 使用ctypes在Python中调用C++动态库
使用ctypes在Python中调用C++动态库 入门操作 使用ctypes库可以直接调用C语言编写的动态库,而如果是调用C++编写的动态库,需要使用extern关键字对动态库的函数进行声明: #in ...
- [Python-MATLAB] 在Python中调用MATLAB的API
可以参考官方的说明文档: http://cn.mathworks.com/help/matlab/matlab_external/get-started-with-matlab-engine-for- ...
- 在python中调用js或者nodejs
在python中调用js或者nodejs要使用PyExecJs第三方包. pip install pyexecjs 示例代码 >>> import execjs >>&g ...
- PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.worker进程。
PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ...
随机推荐
- Fiddler抓websocket协议的包,用jmeter做并发测试
1.Fiddler: 左边为ws请求url.右边为请求数据,响应数据 jmeter:
- 【转】Linux虚拟网络基础——tap
原文:https://blog.csdn.net/chengqiuming/article/details/80071073 ------------------------------------- ...
- PVE授权条款
授权条款 Proxmox VE 软件授权条款,采用的是 GNU AGPL (Affero General Public License) 条款,而 Proxmox VE 本身是 Free Softwa ...
- python应用-猜数字游戏
import random def main(): answer = random.randint(1, 100) counter = 0 while True: counter += 1 numbe ...
- MySQL 中的默认数据库介绍
MySQL 中的默认数据库介绍:https://dataedo.com/kb/databases/mysql/default-databases-schemas 默认数据库 官方文档 informat ...
- 我对ISO 七层模型的理解
应用层: 负责native格式的请求配置,请求发起.关闭等功能: 负责应用数据请求可直接调用的api的支持. 使用表示层和会话层包装而成的便捷工具(API):Alamofire 表示层: 将应用层配置 ...
- docker 启动失败 Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
CentOS7安装docker,安装成功后,启动失败 提示: 我们可以看到此处它提示是Failed to start Docker Application Container Engine. 于是在网 ...
- Vue 实例暴露了一些有用的实例属性与方法。这些属性与方法都有前缀 $,以便与代理的 data 属性区分
var data = { a: 1 } var vm = new Vue({ el: '#example', data: data }) vm.$data === data // -> true ...
- python神器——Anaconda的安装与优化配置
python 对于初学者来说,原版的python在使用的时候非常麻烦,特别是在添加库.升级库的时候总是会报好多错误,缺这缺那.但是自从有了Anaconda以后,妈妈再也不用担心我用不了python啦! ...
- Response Assertion(响应断言)
Response Assertion(响应断言) 响应断言是对服务器的响应数据进行规则匹配. Name(名称):可以随意设置,最好有业务意义. Comments(注释):可以随意设置,可以为空. Ap ...