SWIG 以Python为例
本文为原创文章,转载注明出处,欢迎关注网站https://hkvision.cn
SWIG用途
SWIG是用于开发C/C++与Java,Python,Perl,C#等高级语言之间接口的框架,利用这个框架,我们可以很方便的将C/C++程序应用在Python等高级语言中。
SWIG的步骤
以Python为例
- 安装SWIG(官网下载),选择对应的环境下载即可,安装完成后将swig命令所在目录添加至环境
- 准备好源文件和头文件
|
|
|
|
另外,需要编写对应源文件和头文件的i文件,i文件的具体语法请参考官方文档
// example.i
%module Example_swig // 模块名
%{
#include "example.h" // 这里是用于编译时需要的环境
%}
// 这里是用于生成中间代码时需要的Interface,若想将整个头文件中的声明全导出,则选择使用%include "example"方式
// 若想导出部分,则将想导出的声明放在这里
%include "example.h"
swig生成中间代码
swig -python -c++ example.i
下面是以VS2017为编译环境,具体编译环境请以Python的底层编译环境为准,若不知道底层编译环境是什么,命令行
python
,出来的头部信息中带有相关的信息,例如Python3.6是MSVC140,即VS2015的编译器编译的。- 首先建立空工程,选择输出dll
- 然后将源文件和头文件添加至项目中(可能还需要添加i文件),将生成中间代码步骤中生成的cxx文件添加至项目(这个文件才是生成最后动态链接库的主力文件)
- 然后将Python的include文件夹与libs文件夹分别添加至包含目录与附加库目录中,具体做法请参考
- 若有其他需要添加的环境等请一并配置好
- 最后生成,然后将生成的dll文件改名为
_模块名.pyd
,将生成中间代码步骤中生成的py文件和pyd文件放在一起,就大功告成了。
SWIG需要注意的地方
- 整个过程分为两部分,第一部分是生成中间代码,第二部分是编译,生成中间代码会执行不含%{….%}的部分,也就是说如果生成中间代码出了错,请不要在这部分找问题 第二部分是编译,生成中间代码的步骤中包含%{….%}的地方将会被放在cxx文件中,也就是说这部分是在编译时起作用的。
- 生成中间代码仅仅是生成待编译的cxx文件,swig只需要找到接口的声明就好,不关心其实现。
- SWIG支持的语法不多,若生成中间代码步骤中报错,可以考虑是SWIG的问题,尽量采用ANSI C的语法。
编译整个海康威视SDK
如果你想编译整个SDK的话请参考我另外一篇文章
- 原文作者:HaoKunT
- 原文链接:https://hkvision.cn/2019/07/26/swig-%E4%BB%A5python%E4%B8%BA%E4%BE%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。