所以,我正在尝试使用swig来包装一个c ++库来对它进行JNI调用。但是,swig为我创建的_wrap.cxx文件将无法在g ++中干净地编译。我做错了什么?
这是一个简单的测试用例,它将重现错误,以及其他一些没有错误的情况。我的头文件:
class MyClass {
};
class MyDirectored {
public:
virtual void Overridable (MyClass const clz);
virtual ~MyDirectored();
};
这是我的.i文件:
%module("directors="1") swigtest
%{
#include "swig.h"
%}
%feature("director") MyDirectored
%include "swig.h"
我正在尝试通过以下方式构建:
swig -c++ -package gen -java -outdir gen swig.i
g++ -c swig_wrap.cxx -o swig_wrap.o
g ++步骤产生以下错误:
swig_wrap.cxx: In member function 'virtual void SwigDirector_MyDirectored::Overridable(MyClass)':
swig_wrap.cxx:436: error: invalid conversion from 'const MyClass*' to 'MyClass*'
这似乎是一个合理的抱怨 - 生成的swig_wrap.cxx文件看起来像(很多碎片)
void SwigDirector_MyDirectored::Overridable (MyClass const clz) {
//...
jlong jclz;
//...
*((MyClass **)&jclz) = &clz; //Error on this line
//...
}
我在swig 2.0.4和1.3.40,Linux和Windows中都遇到了同样的错误。有什么建议?我可以使用任何g ++技巧来忽略constness错误吗?
随机说明:我无法控制输入标题,因此更改功能签名是不行的。输入参数的类型 - 类或结构似乎并不重要。使它成为const引用而不是const值参数会通过使SWIG显式地抛弃constness来“修复”错误(但同样,我无法更改输入头)。
提前致谢!