使用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等 ...
随机推荐
- javascript学习4、Function函数、伪数组arguments
一.Function函数基础 函数:就是将一些语句进行封装,然后通过调用的形式,执行这些语句. 1.函数的作用: 将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动. ...
- beforeRouteEnter 与 beforeRouteUpdate(watch $route 对象) 的区别
项目 区别 适用场景 网址 beforeRouteEnter beforeRouteEnter 守卫 不能 访问 this,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建.不过,你可以通过 ...
- 如何将页脚固定在页面底部,4中方法 转载自:W3CPLUS
原博客地址:http://www.w3cplus.com/css/css-sticky-foot-at-bottom-of-the-page 作为一个Web的前端攻城师,在制作页面效果时肯定有碰到下面 ...
- [Algorithm] 21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...
- Xamarin.Forms之XAML
官网参考 XAML基础知识 XAML(eXtensible Application Markup Language)可扩展应用程序标记语言,允许开发者在Xamarin.Forms应用中采用标记而不是代 ...
- ent 基本使用十一 sql.DB 集成
这个功能是github中大家提的比较多的一个,所以官方也暴露了相关的api 配置sql.DB 一种方式 package main import ( "time" " ...
- 进阶blog整理
https://blog.csdn.net/zhangerqing https://bbs.csdn.net/topics/310072893 SCJP
- [RN] React Native 再按一次退出
实现 React Native 再按一次退出 单页面: ... componentWillMount() { BackHandler.addEventListener('hardwareBackPre ...
- 部署django到服务器
部署 服务器环境配置 在本地的虚拟环境中,项目根目录下,执行命令收集所有的包 pip freeze > plist.txt 安装并创建虚拟环境,如已创建则跳过此步 sudo apt-get in ...
- COCI 2015、2016 1st round 题解(官方)
官方题解: 官方代码: Code-KARTE: #include <cstdio> #include <iostream> #include <cstring> u ...