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++包装为 ...
随机推荐
- blfs(systemd版本)学习笔记-构建gnome桌面系统后的配置及安装的应用
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.构建安装ibus-libpinyin的笔记地址:https://www.cnblogs.com/renren-study-n ...
- cf997C. Sky Full of Stars(组合数 容斥)
题意 题目链接 \(n \times n\)的网格,用三种颜色染色,问最后有一行/一列全都为同一种颜色的方案数 Sol Orz fjzzq 最后答案是这个 \[3^{n^2} - (3^n - 3)^ ...
- 正则去除html字符串中的注释、标签、属性
var str = '<!-- 注释1 --><h1 style="color:#00ff00;text-align: center;">ProsperLe ...
- SQL注入与防范
首先给大家看个例子: 1)小编首先在数据库中建立了一张测试表logintable,表内有一条测试信息: 然后写了个测试程序: package com.java.SqlInject; import ja ...
- AndroBench手机性能测试
AndroBench是一个基准测试应用程序,可以衡量你的Android设备的存储性能. AndroBench提供两种方式,第一种可以快速与其他设备的存储进行比较. 第二种 SQLite可以查询数据库表 ...
- Android 9.0更新
北京时间2018年8月7日上午,Google 发布了 Android 9.0 操作系统.并宣布系统版本 Android P 被正式命名为代号"Pie". Android 9.0 利 ...
- Anaconda管理Python环境
Anaconda介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项.Anaconda提供环境管理的功能,功能类似 Virtuale ...
- git 入门教程之 git 私服搭建教程
git 私服搭建教程 前几节我们的远程仓库使用的是 github 网站,托管项目大多是公开的,如果不想让任何人都能看到就需要收费,而且 github 网站毕竟在国外,访问速度太慢,基于上述两点原因,我 ...
- SQL中触发器的使用
创建触发器 是特殊的存储过程,自动执行,一般不要有返回值 类型: 1.后触发器 (AFTER,FOR)先执行对应语句,后执行触发器中的语句 2.前触发器 并没有真正的执行触发语句(insert,up ...
- C# 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
1.在项目解决方案中,找到项目的app.config文件