SWIG 的应用(一)
用 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.o 和 firstSwig_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.o 和 firstSwig_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 的应用(一)的更多相关文章
- Node.js-视图引擎【1】-Swig集成express的安装与配置
node.js视图引擎,选来选去发现Swig最符合我的胃口哈哈. 一.安装Swig视图引擎 npm install -g swig 二.在node.js代码中配置如下 var app = requir ...
- express+gulp构建项目(五)swig模板
这里的文件负责配置swig模板引擎. index.js var jsonHash = require('./json_file'); var staticTag = require("./t ...
- Python、Ruby中的SWIG使用案例
案例一:Python通过SWIG使用C码 linux系统 照着文档[1]做就是了~! 案例二:Python程序调用张华平博士最新发布的中文分词库“NLPIR – ICTCLAS2013”为例~! wi ...
- 安装m2crypto报错swig error : Unrecognized option -builtin
M2Crypto 是最完整的为 Python 包装 OpenSSL 的 RSA,DSA,DH,EC,HMACs,消息摘要,对称密码算法(包括AES)的一个库工具.而自从 M2Crypto 升级到版本 ...
- swig之于c++
[namespace] namespace nsTest1 { int nsAdd(int a, int b) { return a + b; } } namespace nsTest2 { int ...
- crossplatform---Nodejs in Visual Studio Code 05.Swig+Bootstrap
1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...
- Swig 使用指南
如何使用 API swig.init({ allowErrors: false, autoescape: true, cache: true, encoding: 'utf8', filters: { ...
- Demo Swig
演示使用swig工具创建c语言的java接口,生成.so库和java接口文件. 在此之前先要安装swig,安装方法:sudo apt-get install swig 1.使用eclipse创建工程. ...
- html 模板 swig 预编译插件 grunt-swig-precompile
GitHub grunt-swig-precompile NPM grunt-swig-precompile 在书写前端静态页面的时候,每个页面总在书写很多重复的标签. 为了提高效率,结合 swig. ...
- 在Python中调用C++,使用SWIG
http://www.coder4.com/archives/2141 SWIG:Simplified Wrapper and Interface Generator,顾名思义,就是将C/C++包装为 ...
随机推荐
- C#Thread的方法、Start()、Sleep(int)、Abort()、Suspend()、Resume()
Thread类有几个至关重要的方法 Start():启动线程: Sleep(int):静态方法,暂停当前线程指定的毫秒数: Abort():通常使用该方法来终止一个线程: Suspend():该方法并 ...
- java框架之springmvc
一.HelloWorld程序 (1)导包:四个spring 核心包(core.beans.context.expression).一个aop包.两个 web 包和一个logging 包: (2)配置 ...
- CSS/CSS3中的原生变量var详解以及布局响应式网页扩展
使用语法 首先我们先来看一个例子:html代码: <div class="element">这是一段文字</div> css代码: .element { w ...
- 2018-08-27 使用JDT核心库解析JDK源码后初步分析API命名
源自术语词典API项目 · Issue #85 · program-in-chinese/overview, 打算先用早先的代码提取JDK API中的类/方法/参数名, 看看有哪些词需要翻译. 源码在 ...
- Dynamics 365 Online-Unified User Interface
为了加强界面的一致性,提高用户体验,Dynamics 365 Online V9发布了新的Interface:Unified User Interface. 区别于旧的Regular UI,UUI自适 ...
- Redis 保护模式
默认 redis 启用了保护模式,即如果是远程链接不能进行 CRUD 等操作,如果进行该操作报错如下 (error) DENIED Redis is running in protected mode ...
- 章节二、4-String以及StringBuffer和StringBuilder的对比
1.String---字符串常量 字符串是一个常量,一旦被初始化就不会被改变,它存储在字符串常量池中,每一个字符串对象在java中都是线程安全的. 2.StringBuffer---字符串变量 是 ...
- 深圳市共创力咨询为某大型上市企业提供两天的UCD内训与辅导服务!
2017年5月23和24日两天,深圳市共创力咨询为国内某大型上市企业提供了为期两天的内训与辅导服务.本次执行培训与辅导任务的是UCD(基于用户体验的设计)资深顾问蔷薇女士.蔷薇老师分别从UCD理论.U ...
- 【Apache运维基础(6)】Apache的日志管理与分析
简述 Apache 访问日志在实际工作中非常有用,比较典型的例子是进行网站流量统计,查看用户访问时间.地理位置分布.页面点击率等.Apache 的访问日志具有如下4个方面的作用: 记录访问服务器的远程 ...
- C和C++头文件大全
C.传统 C++ #include <assert.h> //设定插入点#include <ctype.h> //字符处理#include <errno.h> ...