一、安装
参考链接:linux 安装swig
下载地址:https://sourceforge.net/projects/swig/files/swig/
tar xvf swig-4.0.2.tar.gz
cd swig-4.0.2
./configure
make
sudo make install
输入:swig -version 查看是否安装成功
错误:
./configure时出现错误 Cannot find pcre-config script from PCRE (Perl Compatible Regular Expressions) library package. This dependency is needed for configure to complete
原因: Linux下swig的正确安装 | 第一个(C++转Python接口)测试示例 | (二)
依赖库 PCRE 没有安装
PCRE 安装了,但是安装的版本和 swig 不匹配
解决方法:
可以指定参数 不加载 PCRE 模块
./configure --without-pcre
二、使用:
作用: swig的作用就是让脚本语言如python调用C/C++的里的函数。本质就是通过输入的c/c++语言生成目标的高级语言。
参考链接: SWIG-使用C语言扩展Python的神器
使用步骤
写一个C代码文件
编写接口文件(.i)
对接口文件运行SWIG,会生成一些额外的C语言代码
将原来的C语言代码和生成的一起编译,生成一个库
编写c源代码
/* File : example.c */
#include <stdio.h>
int Circle (int x, int y, int radius) {
/* Draw Circle */
printf("Drawing the circle...\n");
/* Return -1 to test contract post assertion */
if (radius == 2)
return -1;
else
return 1;
}
编写.i的接口文件
/* File : example.i */
/* Basic C example for swig contract */
/* Tiger, University of Chicago, 2003 */
%module example
%contract Circle (int x, int y, int radius) {
require:
x >= 0;
y >= 0;
radius > x;
ensure:
Circle >= 0;
}
%inline %{
extern int Circle (int x, int y, int radius);
%}
运行swig -python example.i
输入以上代码,这会生成一个example_wrap.c和example.py文件以及一个Examples文件夹
编译生成目标二进制的.o文件,再生成动态库文件,记住-I后面接的是本地python所在的头文件路径,可以通过find | grep python查找路径。
gcc -c -fpic example.c example_wrap.c -I/usr/include/python3.5/#将源代码编译生成目标文件,加入-fpic是生成与位置无关的目标文件。
gcc -shared example.o example_wrap.o -o _example.so#-shared是生成动态库。