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#基础(204)--对象初始化器,基本数据类型与引用数据类型特点总结,ref,out关键字的使用
对象初始化器: 对象在创建过程中也可以使用对象初始化器完成“属性的初始化” Student stu =new Student(){ StudentId=, StudentName="张三&q ...
- Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- C# 开启一个新进程并为新进程设置工作目录
Process p = new System.Diagnostics.Process(); //设置新进程的工作目录,如果不设置那么新进程的工作目录为开启这个进程的工作目录 p.StartInfo.W ...
- verilog实现两个数的最大公因数
module gcd(clk,clr,go_i,x_i,y_i,d_o); input clk,clr; input go_i; :] x_i,y_i; :] d_o; :] x,y,r; alway ...
- Cygwin下编译的程序不使用Cygwin.dll即可运行的命令 及常用命令简介
cc -mno-cygwin foo.c 1.$ ps PS的相关用法: QuoteUsage ps [-aefl] [-u uid]-f = show process uids, ppids-l = ...
- 根据标签中动态获取的值绑定特定的class
数据有mock数据获取 mock文件: index文件: 引入文件index: 获取数据函数: 根据获取的标签内容给定不同的样式:
- fedora 28/29 配置 C++ 环境
最近 使用C++ 开发 更换机器的时候,还要重新配置一下 gnu 工具链.于是简单进行了安装了一下: yum install gcc yum install gcc-c++ yum install g ...
- Docker: docker 启动一个Nginx容器
本文演示从官方镜像仓库拉取一个nginx镜像并启动docker run -d –p 8800:80 nginx (同一个镜像,可以启动N个容器, 比如说,一个nginx服务,可以在这个docker主机 ...
- 用static声明外部变量与内、外部函数
1.用static声明外部变量 若希望某些外部变量只限于被本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明. 例:(file1.c) #include <stdafx ...
- 10.scrapy框架简介和基础应用
今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被 ...