python调用C/C++

本文主要说明使用SWIG来使得 python 调用 C++的方法。

  1. 如果没有参数传递从python传递至C++,python调用C++的最简单方法是将函数声明为C可用函数,然后作为C code被python调用,如Stack Overflow: Calling C/C++ from python?三楼所示;

  2. 有参数传递至C++函数,声明时会稍有不同;

swig 安装

1
sudo apt-get install swig

python调用C的方法

接口文件定义

1
2
3
4
5
6
7
8
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern int fact(int n);
%}
extern int fact(int n);

C源码文件

1
2
3
4
5
/* File : example.c */
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}

动态链接库生成

1
2
3
4
5
6
7
8
swig -python example.i
# 生成 example.py example_wrap.c
gcc -c example.c example_wrap.c -I/usr/include/python2.7
# 生成 example.o example_wrap.o
ld -shared example.o example_wrap.o -o _example.so
# 生成 _example.so

python调用

1
2
3
4
5
6
7
>>> import example
>>> example.fact(3)
6
>>> example.fact(6)
720
>>> example.fact(2)
2

小插曲

1
2
whereis python | grep "include"
# 查找python的include目录
1
2
man g++
# 然后可以利用vi的查找功能,检索感兴趣的关键字

参考资料

[1] Stack Overflow: Calling C/C++ from python?
[2] SWIG 项目主页
[3] python 调用 C++ code
[4] C++调用python