Java SWIG为控制器生成的包装器代码中存在常量错误 所以,我试图用包来包装一个C++库,以使JNI调用它。但是,swig为我创建的_wrap.cxx文件无法在g++中干净地编译。我做错了什么

Java SWIG为控制器生成的包装器代码中存在常量错误 所以,我试图用包来包装一个C++库,以使JNI调用它。但是,swig为我创建的_wrap.cxx文件无法在g++中干净地编译。我做错了什么,java,constants,swig,Java,Constants,Swig,这里有一个简单的测试用例,它将重现错误,还有几个其他不会出错的用例。我的头文件: class MyClass { }; class MyDirectored { public: virtual void Overridable (MyClass const clz); virtual ~MyDirectored(); }; 这是我的.i文件: %module("directors="1") swigtest %{ #include "swig.h" %} %feature("dir

这里有一个简单的测试用例,它将重现错误,还有几个其他不会出错的用例。我的头文件:

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文件看起来像(很多讽刺)

我在swig 2.0.4和1.3.40、Linux和Windows中都遇到了相同的错误。有什么建议吗?有没有可以用来忽略常量错误的g++技巧

随机注释:我无法控制输入标题,因此更改函数签名是不可能的。输入参数的类型似乎并不重要-class或struct。将其设置为常量引用而不是常量值参数会导致SWIG显式地丢弃常量,从而“修复”错误(但同样,我无法更改输入头)


提前谢谢

好问题-我在这个问题上被难住了!通常我会建议改为参考,但如果你不能做到这一点,我不确定什么是合理的解决办法。
void SwigDirector_MyDirectored::Overridable (MyClass const clz) {
  //...
  jlong jclz;
  //...
  *((MyClass **)&jclz) = &clz; //Error on this line
  //...
}