在Python中调用C++,使用SWIG
http://www.coder4.com/archives/2141
SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为其他高级语言的Wrapper工具,非常好用。
该项目历史悠久(创始于1995年!),且一直非常活跃,目前最新版本为2011年5月发布的2.0.4。
1、安装SWIG
1
2
3
4
5
6
7
|
wget http://prdownloads.sourceforge.net/swig/swig-2.0.4.tar.gz
tar -xzvf swig-2.0.4.tar.gz
cd swig-2.0.4/
#我们这里只编译Python的语言支持,可以根据你得需要加别的!
./configure --without-alllang --with-python|grep python
make
sudo make install
|
2、C++代码
我们以包装一个简单的类为例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <string>
using std::string;
class MyObj
{
public:
string SayHello(string name)
{
string ret("Hello, ");
return ret + name;
}
private:
string id;
};
|
3、编写Interface文件
SWIG需要一个intf文件,可以写的很复杂,也可以偷懒:只引用你要Wrap的.h头问件就可以啦!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/* myobj.i */
%module myobj
%{
/* 相关引用 */
#include "MyObj.h"
#include <string>
%}
/* 对STL的支持 */
%include stl.i
/* Wrapper并生成代码 */
%include "MyObj.h"
|
4、生成Wrapper代码
1
2
3
4
5
6
7
8
|
#生成,第一个python是目标语言,跌入个-c++是启用c++模式
swig -python -c++ ./myobj.i
#成功的话,会生成如下文件
myobj.i myobj_wrap.c myobj_wrap.cxx
#编译,生成so文件,注意一定要用g++而不是ld做Link!!
g++ -c myobj_wrap.c myobj_wrap.cxx -I /usr/include/python2.6/ -fPIC
g++ -shared myobj_wrap.o -o _myobj.so
|
5、测试
1
2
3
4
5
|
>>> import myobj
>>> o = myobj.MyObj()
>>> o.SayHello("ICT")
'Hello, ICT'
>>>
|
6、补充
如果你想使用复合类型,例如vector<string>,请务必在.i文件中声明!
1
2
3
4
|
namespace std{
%template(VectorOfString) vector<string>;
}
|
转载于:https://www.cnblogs.com/DjangoBlog/p/4105530.html
在Python中调用C++,使用SWIG相关推荐
- 在Python中调用C/C++:cython及pybind11
在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...
- python如何用c语言表示_如何在python中调用C语言代码
原博文 2019-04-03 14:19 − 1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写 ...
- 在python中调用js或者nodejs要使用PyExecJs第三方包。
在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...
- 如何在Python中调用Windows的cmd命令?
简 介: 利用os,commands,subprocess模块可以在python中调用windows中的命令.从使用方便性上来看,利用os.popen可以执行windows的程序并可以获得返回内容. ...
- python中调用c库
python中调用c库 2013-04-23 15:34:52| 分类: python核心编程 | 标签:python makefile |举报 |字号 订阅 参考地址:http://my. ...
- python r语言 结合 部署_(转)python中调用R语言通过rpy2 进行交互安装配置详解...
python中调用R语言通过rpy2 进行详解 1.R语言的安装: 大家进行R语言的安装,在安装好R后,需要配置环境变量R才能进行使用. 对此电脑右键->选择高级设置->环境变量-> ...
- python中调用C++函数
python中调用C++函数 无参调用 单变量传入与返回调用 numpy数组传入与返回调用 c++类调用 用python写不香吗?还这么复杂调用C++? 一. 无参调用 在python中调用无参数和无 ...
- python调用simulink_[Python-MATLAB] 在Python中调用MATLAB的API
可以参考官方的说明文档: MATLAB Engine API的使用文档: 原材料: 1.MATLAB 2015a 32位的 2.Python 2.7.13 32位的 安装: 1.运行cmd,切 ...
- [转载] 扩展Python之在Python中调用C编写的函数模块
参考链接: 如何在Python中调用C函数 目录 编写Python扩展1. 创建应用代码2. 根据样板编写封装代码2.1 包含Python头文件2.2 为每一个模块函数添加形如PyObject* *M ...
- linux系统下Opencv4.1.1编译安装,以及增加子函数和python中调用
目录 Table of Contents 目录 一 源码编译和安装 添加opencv路径 二 增加并列子函数的方法 三 增加库函数形参的方法 四 cv增加子函数一些数据变量的问题 4.1 数据类型 一 ...
最新文章
- 【武书连】2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
- css设置元素继承父元素宽度_CSS设置HTML元素的高度与宽度的各种情况总结
- java注解@remote,Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端
- StringBuffer(字符串缓冲区)
- 利用Windows API获得系统高级功能
- date类before()方法的主要作用是_DateFormat类的子类:SimpleDateFormat
- 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
- 【leveldb】资料
- Alpine linux硬盘安装
- 程序员面试如何与HR谈薪
- RedHat7配置本地yum源(超详细过程)
- 吾身听物化,化及事则休
- rax Picture组件
- Windows中使用pip下载任何包都报错
- 59% 的程序员曾担心自己猝死!
- WEB测试番外之----XSS攻击
- lucene高亮显示
- [译] 项目什么时候需要 React 框架呢?
- 【MQ笔记】聊一聊空间(线性空间、赋范空间、度量空间、内积空间、欧氏空间、酉空间)
- webpack打包工具学习(前端构建工具)