用 C/C++ 扩展 Python。

- 如果仅使用标准 C 库函数,则可以使用 Python 自带的 ctypes 模块,或者使用 cffi。

- 如果要使用自定义 C/C++ 函数,又不怕写 wrapper 麻烦,则可以使用 Python C API。

- 如果专门针对 C++ 模块打包,可以尝试使用 Boost。

除此之外,可以尝试一下 SWIG 打包 C/C++,以下是一个开始。

1) 自己编写接口文件 *.i

要打包的 C 代码 firstSwig.c

/* File: first swig, c file. */

double my_ver = 0.1;

// factorial
int fact(int n) {
if (n <= )
return ;
else
return n * fact(n-);
} // mod
int mod(int m, int n) {
return m % n;
}

定义接口文件 firstSwig.i

/* swig interface file */

%module firstSwig

%{
// Put headers and other declarations here
extern double my_ver;
extern int fact(int);
extern int mod(int, int);
%} extern double my_ver;
extern int fact(int);
extern int mod(int, int);

swig 命令生成 wrapper 文件 firstSwig_wrap.c 和 Python 模块文件 firstSwig.py

$ swig -python firstSwig.i

gcc 编译生成目标文件 firstSwig.ofirstSwig_wrap.o

$ gcc -c -fpic firstSwig.c firstSwig_wrap.c -I /usr/include/python2./

gcc 链接目标文件为动态链接库 _firstSwig.so

$ gcc -shared firstSwig.o firstSwig_wrap.o -o _firstSwig.so

然后将 firstSwig.py_firstSwig.so 一起发布即可。

2) 不编写接口文件 *.i,而是直接用头文件 *.h  (注意这种情况下,不支持变量的打包)

要打包的 C 代码 firstSwig.c

/* File: first swig, c file. */

// factorial
int fact(int n) {
if (n <= )
return ;
else
return n * fact(n-);
} // mod
int mod(int m, int n) {
return m % n;
}

对应 C 代码的头文件 firstSwig.h

/* File: first swig, header file. */

// factorial
int fact(int n); // mod
int mod(int m, int n);

swig 直接使用头文件生成 wrapper 文件 firstSwig_wrap.c 和 Python 模块文件 firstSwig.py

$ swig -python -module firstSwig firstSwig.h

其余步骤和方法 1) 一致,

gcc 编译生成目标文件 firstSwig.ofirstSwig_wrap.o

$ gcc -c -fpic firstSwig.c firstSwig_wrap.c -I /usr/include/python2./

gcc 链接目标文件为动态链接库 _firstSwig.so

$ gcc -shared firstSwig.o firstSwig_wrap.o -o _firstSwig.so

然后将 firstSwig.py_firstSwig.so 一起发布即可。

完。

SWIG 的应用(一)的更多相关文章

  1. Node.js-视图引擎【1】-Swig集成express的安装与配置

    node.js视图引擎,选来选去发现Swig最符合我的胃口哈哈. 一.安装Swig视图引擎 npm install -g swig 二.在node.js代码中配置如下 var app = requir ...

  2. express+gulp构建项目(五)swig模板

    这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...

  3. Python、Ruby中的SWIG使用案例

    案例一:Python通过SWIG使用C码 linux系统 照着文档[1]做就是了~! 案例二:Python程序调用张华平博士最新发布的中文分词库“NLPIR – ICTCLAS2013”为例~! wi ...

  4. 安装m2crypto报错swig error : Unrecognized option -builtin

    M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具.而自从 M2Crypto 升级到版本 ...

  5. swig之于c++

    [namespace] namespace nsTest1 { int nsAdd(int a, int b) { return a + b; } } namespace nsTest2 { int ...

  6. crossplatform---Nodejs in Visual Studio Code 05.Swig+Bootstrap

    1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...

  7. Swig 使用指南

    如何使用 API swig.init({ allowErrors: false, autoescape: true, cache: true, encoding: 'utf8', filters: { ...

  8. Demo Swig

    演示使用swig工具创建c语言的java接口,生成.so库和java接口文件. 在此之前先要安装swig,安装方法:sudo apt-get install swig 1.使用eclipse创建工程. ...

  9. html 模板 swig 预编译插件 grunt-swig-precompile

    GitHub grunt-swig-precompile NPM grunt-swig-precompile 在书写前端静态页面的时候,每个页面总在书写很多重复的标签. 为了提高效率,结合 swig. ...

  10. 在Python中调用C++,使用SWIG

    http://www.coder4.com/archives/2141 SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为 ...

随机推荐

  1. MySQL5.7: datetime

    -- 当前日期时间 select now(); select now(3);-- 保留3位毫秒数 SELECT NOW(6); -- 保留6位毫秒数 -- 当前日期和时间 至秒 select curr ...

  2. 小tips:JS操作数组的slice()与splice()方法

    slice(start, end) slice()方法返回从参数指定位置开始到当前数组末尾的所有项.如果有两个参数,该方法返回起始和结束位置之间的项,但不包括结束位置的项. var colors = ...

  3. 【20190219】CSS-知识点整理:float、em、浏览器的渲染过程

    一.float与absolute 昨天看到一篇博客总结CSS中的一些关键知识点,里面对float元素进行了比较深入的解析,才发现我之前对float的理解不到位.float实际上最初的目的是为了实现图片 ...

  4. iPhone手机怎么投屏到电脑上

    如今生活水平不断上升,人们更加追求高质量.高享受的生活,所以可以利用一切资源提高生活质量,享受更好的生活体验,比如说手机投屏电脑就可以提高我们的视觉体验,所以更多的人去尝试,那么iPhone手机怎么投 ...

  5. redis redis常用命令及内存分析总结(附RedisClient工具简介

    redis常用命令及内存分析总结(附RedisClient工具简介 by:授客 QQ:1033553122 redis-cli工具 查看帮助 连接redis数据库 常用命令 exists key se ...

  6. android Camera相机类

    Camera相机类相关的几个流程方法 Camera.open(cameraId) 打开相机 camera.setDisplayOrientation(0) 设置相机水平方向 mCamera.setPr ...

  7. Android Studio多渠道打包(二)

    虽然多渠道打包的方式有很多种,那么今天我要说的通过工具的形式进行多渠道打包 首先,打开Android studio,找到顶部Build,点开 选择红色部分,里面的编辑框可以帮助我们更快的熟悉Gradl ...

  8. [python]函数返回多个return值

    python支持函数直接返回多个变量,具体用法如下: >>> def test(): ... a=2 ... b=3 ... return a,b ... >>> ...

  9. 关于PID的如何修改的FAQ

    1.如何查询支付宝账号对应的PID: 2.意外绑错或者想修改PID流程: (1)和业务联系拿到商家平台支付宝变更协议书填写(模版如下,可在附件中下载) 致:杭州银盒宝成科技有限公司 本人因      ...

  10. 语句调优基础知识-set statistics profile on

    set statistics profile on 获取语句真实的执行计划信息 set statistics profile on go select distinct Productid,unitp ...