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相关推荐

  1. 在Python中调用C/C++:cython及pybind11

    在Python中调用C/C++:cython及pybind11 转自:https://zhuanlan.zhihu.com/p/442935082 Python写起来非常方便, 但面对大量for循环的 ...

  2. python如何用c语言表示_如何在python中调用C语言代码

    原博文 2019-04-03 14:19 − 1.使用C扩展CPython还为开发者实现了一个有趣的特性,使用Python可以轻松调用C代码 开发者有三种方法可以在自己的Python代码中来调用C编写 ...

  3. 在python中调用js或者nodejs要使用PyExecJs第三方包。

    在python中调用js或者nodejs要使用PyExecJs第三方包. 使用时:import execjs 这是没有用到nodejs的情况:如果用到nodejs,这种写法会报"Cannot ...

  4. 如何在Python中调用Windows的cmd命令?

    简 介: 利用os,commands,subprocess模块可以在python中调用windows中的命令.从使用方便性上来看,利用os.popen可以执行windows的程序并可以获得返回内容. ...

  5. python中调用c库

    python中调用c库 2013-04-23 15:34:52|  分类: python核心编程 |  标签:python  makefile   |举报 |字号 订阅 参考地址:http://my. ...

  6. python r语言 结合 部署_(转)python中调用R语言通过rpy2 进行交互安装配置详解...

    python中调用R语言通过rpy2 进行详解 1.R语言的安装: 大家进行R语言的安装,在安装好R后,需要配置环境变量R才能进行使用. 对此电脑右键->选择高级设置->环境变量-> ...

  7. python中调用C++函数

    python中调用C++函数 无参调用 单变量传入与返回调用 numpy数组传入与返回调用 c++类调用 用python写不香吗?还这么复杂调用C++? 一. 无参调用 在python中调用无参数和无 ...

  8. python调用simulink_[Python-MATLAB] 在Python中调用MATLAB的API

    可以参考官方的说明文档: MATLAB Engine API的使用文档: 原材料: 1.MATLAB 2015a  32位的 2.Python 2.7.13    32位的 安装: 1.运行cmd,切 ...

  9. [转载] 扩展Python之在Python中调用C编写的函数模块

    参考链接: 如何在Python中调用C函数 目录 编写Python扩展1. 创建应用代码2. 根据样板编写封装代码2.1 包含Python头文件2.2 为每一个模块函数添加形如PyObject* *M ...

  10. linux系统下Opencv4.1.1编译安装,以及增加子函数和python中调用

    目录 Table of Contents 目录 一 源码编译和安装 添加opencv路径 二 增加并列子函数的方法 三 增加库函数形参的方法 四 cv增加子函数一些数据变量的问题 4.1 数据类型 一 ...

最新文章

  1. 【武书连】2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
  2. css设置元素继承父元素宽度_CSS设置HTML元素的高度与宽度的各种情况总结
  3. java注解@remote,Dwr3.0纯注解(纯Java Code配置)配置与应用浅析二之前端调用后端
  4. StringBuffer(字符串缓冲区)
  5. 利用Windows API获得系统高级功能
  6. date类before()方法的主要作用是_DateFormat类的子类:SimpleDateFormat
  7. 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
  8. 【leveldb】资料
  9. Alpine linux硬盘安装
  10. 程序员面试如何与HR谈薪
  11. RedHat7配置本地yum源(超详细过程)
  12. 吾身听物化,化及事则休
  13. rax Picture组件
  14. Windows中使用pip下载任何包都报错
  15. 59% 的程序员曾担心自己猝死!
  16. WEB测试番外之----XSS攻击
  17. lucene高亮显示
  18. [译] 项目什么时候需要 React 框架呢?
  19. 【MQ笔记】聊一聊空间(线性空间、赋范空间、度量空间、内积空间、欧氏空间、酉空间)
  20. webpack打包工具学习(前端构建工具)

热门文章

  1. Android多媒体扫描过程(Android Media Scanner Prosess)
  2. MATLAB 结构型变量
  3. C++ 动态创建对象数组
  4. string [线段树优化桶排]
  5. 大一暑假第三周学习体会
  6. Pyserial 实现串口 base on python3
  7. haskell读写文件相关(含二进制)
  8. 2013年35真棒恭贺新禧 - 壁纸
  9. 互联网周刊:谁是下一个IE?
  10. c++ primer学习笔记(2)-c++基本数据类型