使用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等 ...
随机推荐
- mysql查询语句中使用星号真的慢的要死?
前言 之所以写这篇文章,是源于以前看过的关于sql语句优化的帖子,里面明确提到了在sql语句中不要使用 * 来做查询,就像下面的规则中说的 2.尽量避免使用select *,返回无用的字段会降低查询效 ...
- ROS 的一些常用命令行功能
1.安装并添加源sudo gedit /etc/apt/sources.list更新下sudo apt-get update添加 sources.list,如sudo sh -c '. /etc/ls ...
- beta冲刺总结那周余嘉熊掌将得队
作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺 团队名称: 那周余嘉熊掌将得队 作业目标:beta冲刺总结 队员学号 队员姓名 博客地址 备注 221600131 J ...
- 项目Beta冲刺--1/7
项目Beta冲刺--1/7 作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Beta冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及 ...
- 2019牛客暑期多校训练营(第五场)B:generator 1 (10进制快速幂)
题意:给定x0,x1,a,b,满足xi=a*xi-1+b*xi-2: 求xn,n<10^(10^6): 思路:10进制快速幂裸题.降幂来写好像也是可以的,但是循环节不是phi(mod),所以数学 ...
- C++的map用法
图,自动建立表示关键字和键值(key - value)之间的对应关系,两者可以是任何数据类型,key唯一并且自动排序,value不唯一. 1.头文件#include<map> 2.map& ...
- strings命令(转)
以前我用strings命令的频率不高, 现在越用越顺手, 而且已经是离不开strings命令了.虽然以前说过strings命令, 但今天还是要说. 主要是两大用途, 下面来说明一下: 一. 确认代码编 ...
- 使用google autoservice 自动生成java spi 描述文件
spi 是一种服务发现的标准,对于开发中我们通常需要编写 META-INF/services 文件夹中定义的类. google auto 中的autoservice 可以帮助我们生成对应的配置,很方便 ...
- Zookeeper的缺点
工作中对Zookeeper都是间接比较浅的使用,性能也没太高的要求所以对它的缺点也没太深的认识,从网上评价看,它还是有不少问题的. 1. 原生客户端坑太多,Curator(Curator是Netfli ...
- A1137 | 录数据查询模拟
这应该是比较简单的一个模拟题,但是考试的时候花了较长的时间,并且最后一个case没过,丢了6分.这题的通过率不高,可见最后一个case还是有挑战性的. 考试的时候想的是在录数据的时候建立一个[ID]到 ...