为要在python中使用的c ++库生成包装器代码

时间:2019-09-17 15:45:21

标签: python c++ ctypes swig

我正在用python创建一个仿真工具,并且需要一个c ++库。我该如何与python接口库?该库很大,但是我只想调用一些函数和类成员函数。

到目前为止,为了使自己熟悉该过程,我已经在较小的C ++代码上使用ctypes和SWIG感到厌倦。

对于ctypes,必须已经将c ++库编译成共享库,这不是问题。我已经使用ctypes从共享库中调用c ++函数,但是可以使用ctypes来调用类成员函数吗?

如果我使用SWIG,是否必须在接口文件中包含c ++库的所有头文件,还是仅包含包含所需功能的头文件?

1 个答案:

答案 0 :(得分:0)

ctypes可以调用C接口或extern "C"的C ++接口,但不能理解C ++特定的类,例如std::string或成员函数。

对于SWIG,您可以仅在SWIG接口文件中包含要公开给Python的标头。例如:

%module example

%{  
// This section is copied into the wrapper so the generated code can compile.
// No wrappers are generated from this.
#include "myheader1.h"
#include "myheader2.h"
%}

%include "myheader1.h"  // Wrap all functions directly declared in this header.    
int myfunc(int a, int b);  // Wrap only this one function in myheader2.h.