3

按照网络上的不同教程,我尝试使用 SWIG 在 python 中制作 c++ 类的包装器。

我的课看起来像这样:

/*file libraryInstance.h*/
struct LibraryInstance
{
    void init();
    void terminate();
private:
    std::shared_ptr<AnObject> m_spAnObject;
};

对于 python 博览会,我制作了这个 .i 文件:

%module LibraryInstance
%{
#include "libraryInstance.h"
%}
%include "libraryInstance.h"

然后我执行了命令swig -c++ -python -o ./src/libraryInstance_wrap.cpp ./src/libraryInstance.i

没有任何输出错误,swig 生成了两个文件,libraryInstance_wrap.cpp并且LibraryInstance.py

然后我编译 c++ 文件,包括libraryInstance_wrap.cpp. 所有编译都很好,我得到了我的库 .so 文件。

当我查看生成的 swig 时LibraryInstance.py,我可以清楚地看到class LibraryInstance

参看。整个生成的 python 包装器在这里。

python LibraryInstance.py但是当我在与我的 .so 相同的目录中启动 command 时,我看到了这个错误输出:

Traceback (most recent call last):
  File "LibraryInstance.py", line 26, in <module>
    _LibraryInstance = swig_import_helper()
  File "LibraryInstance.py", line 18, in swig_import_helper
    import _LibraryInstance
ImportError: No module named _LibraryInstance

而且当我查看LibraryInstance.py的代码时,它看起来好像抛出了异常ImportError,python找不到模块。(第 18 行)。

知道我应该怎么做才能纠正这个问题吗?

4

1 回答 1

5

在 SWIG 文档中,第 31.2.2 段指出库 .so 的名称应该是_NameOfTheModule.so

所以我重命名了我的 library _LibraryInstance.so,而不是LibraryInstance.so... 现在我的模块加载正常。

于 2013-01-30T18:28:13.483 回答