Итак, я пытаюсь использовать swig , чтобы обернуть библиотеку c ++ для выполнения вызовов JNI.Но файл _wrap.cxx, который создает для меня swig, не будет правильно скомпилирован в 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 ++ step выдает следующую ошибку:
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 ++, который я мог бы использовать, чтобы игнорировать ошибку константности?
Случайные примечания: я не могу контролировать заголовок ввода, поэтому изменение сигнатуры функции не требуется.Похоже, не имеет значения, какой тип входного параметра - класс или структура.Если сделать его константной ссылкой вместо параметра константного значения, то это «исправит» ошибку, заставив SWIG явно отбросить константу (но опять же, я не могу изменить входной заголовок).
Заранее спасибо!