按照网络上的不同教程,我尝试使用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.cppLibraryInstance.py
然后,我编译c++文件,包括libraryInstance_wrap.cpp。所有编译正常,我得到了我的库.so文件。

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

cf. entire generated python wrapper here.

但是当我在与.so相同的目录中启动命令python LibraryInstance.py时,我看到此错误输出:
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行)。

知道该怎么做才能更正吗?

最佳答案

在SWIG文档paragraph 31.2.2中,声明了库.so的名称应为_NameOfTheModule.so
所以我重命名了我的库_LibraryInstance.so,而不是LibraryInstance.so ...,现在我的模块可以正常加载了。

关于c++ - Python提示SWIG模块不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14609637/

10-09 05:26