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++包装为 ...
随机推荐
- Java之static作用的全方位总结
1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...
- css文本超出隐藏显示省略号
p style="width: 300px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"> 如 ...
- 你不可不知的Java引用类型之——PhantomReference源码详解
定义 PhantomReference是虚引用,该引用不会影响不会影响对象的生命周期,也无法从虚引用中获取对象实例. 说明 源码介绍部分其实也没多大内容,主要内容都在前面介绍中说完了.PhantomR ...
- Web前端:博客美化:四、网易云音乐单曲播放器
1.页面定制CSS代码 /*3.音乐播放器*/ .content-wrap { overflow-y: scroll; -webkit-overflow-scrolling: touch; } /* ...
- JavaWeb:servlet实现下载与上传功能
本文内容: servlet实现下载功能 servlet实现上传功能 首发日期:2018-07-21 servlet实现下载功能 实现流程 1.首先制作一个jsp页面,主要是用来触发下载的.这里可以根据 ...
- 想起以前写的一个爬虫,然后就用C#WinForm写了一个下载小说的软件,比较简单
本软件本是练习.讨论爬虫技术所用.如果侵犯了您的利益请联系我,我会立即删除! 小工具安装包: 百度网盘链接:https://pan.baidu.com/s/1m_OuEBOEE47kYaXq5fwpI ...
- HttpHandler实现网页图片防盗链
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...
- c/c++ 函数模板初探
函数模板初探 1,由来:有时候,函数的逻辑是一样的,只是参数的类型不同,比如下面 int Max(int a, int b){ return a > b ? a : b; } double Ma ...
- CentOS7 Python2 和Python3 共存(Python3安装)【转】
1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5. 使用 python -V 命令查看一下是否安 ...
- Windows平台搭建-----C语言
上期我们已经进行Linux的平台搭建,今期我们就来搭建下我们最常用的.最适合初学者的一种方式,那就是搭建Windows平台开发环境,只需要两种工具即可,一个就是编辑器(编辑代码的工具),另一个就是编译 ...