переопределение кастинга SWIG - PullRequest
2 голосов
/ 22 сентября 2011

Кажется, что приведение указателя SWIG не работает :

*(int **)&jresult = result;   // shenanigans
return jresult;

Это действительно должно быть

jresult= (jlong)result; 

Как я могу подключиться к SWIG, чтобы рассказать, как разыграть?

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Хотя ответ Фронзи технически верен (в конце концов, это то, о чем я просил), лучшее решение - не взломать, как SWIG выполняет кастинг, а передать -fno-strict-aliasing в gcc.

Похоронен в документах SWIG, он специально говорит, что делать :

Важно

Если вы собираетесьчтобы использовать оптимизацию, включенную с помощью gcc (например, -O2), убедитесь, что вы также компилируете с -fno-strict-aliasing.Оптимизация GCC стала более агрессивной, начиная с gcc-4.0, и приведет к тому, что код завершится неудачно с включенной строгой оптимизацией алиасинга.Подробности смотрите в разделе C / C ++ to Java .

1 голос
/ 22 сентября 2011

Вы можете использовать карту типов. См. Документ здесь для получения дополнительной информации. Вероятно, что-то похожее на код ниже.

%typemap(out) TYPE *
%{ 
  *($&1_ltype)&$result = (jlong)$1; 
%} 
...