我正在尝试使用SWIG将一个类包装在python的大型C ++代码库中,并且在编译生成的C ++包装器时遇到了一些问题。
我创建了一个基本的接口文件,PCSearchResult.i:
%module PCSearchResult
%{
#include "PCSearchResult.h"
%}
%include "PCSearchResult.h"
我用:
生成了PCSearchResult_wrap.cxxswig -c++ -python PCSearchResult.i
并尝试使用:
进行编译g++ -c -fpic -I. -I$(OTHERINCS) -I/usr/include/python2.7 PCSearchResult_wrap.cxx
这会导致大量错误。以下是前15行:
PCSearchResult_wrap.cxx: In function 'PyObject* _wrap_new_PCSearchResult__SWIG_1(PyObject*, PyObject*)':
PCSearchResult_wrap.cxx:3226:3: error: 'Point3d' was not declared in this scope
PCSearchResult_wrap.cxx:3226:3: note: suggested alternative:
In file included from PointCloud.h:28:0,
from PCSearchResult.h:29,
from PCSearchResult_wrap.cxx:3044:
Point3d.h:43:7: note: 'Isis::Point3d'
PCSearchResult_wrap.cxx:3226:12: error: 'arg1' was not declared in this scope
PCSearchResult_wrap.cxx:3230:19: error: 'PointCloud' was not declared in this scope
PCSearchResult_wrap.cxx:3230:19: note: suggested alternative:
In file included from PCSearchResult.h:29:0,
from PCSearchResult_wrap.cxx:3044:
PointCloud.h:80:7: note: 'Isis::PointCloud'
PCSearchResult_wrap.cxx:3230:30: error: template argument 1 is invalid
PCSearchResult_wrap.cxx:3230:38: error: invalid type in declaration before '=' token
所有“未在此范围内声明”的错误让我认为我必须未能在正确的位置包含某些内容。我知道我在PCSearchResult.h中拥有所有正确的头文件#included,因为一切都在不使用SWIG时编译并运行良好。
我还需要在其他地方提供有关我正在尝试包装的头文件中使用的类的SWIG信息(在其他头文件中定义)吗?我已经阅读了SWIG文档的SWIG and C++ chapter,但仍对此感到困惑。
我在Fedora 18上使用SWIG版本3.0.2和g ++版本4.7.2。
答案 0 :(得分:3)
看起来Point3d在命名空间中。在您自己的源文件中,您可能使用完整的decl,或者您在源中使用了名称空间decl。因此,请尝试在.i文件中添加using namespace Isis;
:
%module PCSearchResult
%{
#include "PCSearchResult.h"
using namespace Isis;
%}
%include "PCSearchResult.h"
这会将它插入wrap.cxx文件中。