在《swig 封装C++ 动态库的实践(一)》中我们仅仅搭建了一个非常基本的python模块封装的工程框架,并举了一个简单的小的示例。这个示例实际上仅仅能解决最简单的需求,比如一个比较简单的C库,头文件里面都是类似于 int fun( int a, int b) 这种非常简单的情况。这里我现对这个小示例进行一些基本的分析,方便我们对swig的理解。
首先, 在mod_a.i 中 用 %{ %} 扩起来的头文件就是mod_a_wrap.cxx 里面直接引用的头文件,是编译的必要条件,我们不要做任何修改。
但是,%include "../include/a.h 这句话实际上是 mod_a.i 把a.h这个头文件 copy(include)到 mod_a.i里面的。
比如:a.h 里面有一个函数 int fun( int a, int b) ; 那么最终的mod_a.i 里面就会有 这个函数的声明。如果我们把这个句话删掉不引用a.h, 那么我们直接在 mod_a.i 里面写下 int fun( int a, int b) ; 也是等效的,后面我们会看到实际上mod_a.i 里面内容基本上就是设法在生成一个最终的C++桥接函数,语法跟C++的语法几乎一样,只是引入了很多swig提供的全局变量。
【未完待续】