Кажется, что приведение указателя SWIG не работает :
*(int **)&jresult = result; // shenanigans return jresult;
Это действительно должно быть
jresult= (jlong)result;
Как я могу подключиться к SWIG, чтобы рассказать, как разыграть?
Хотя ответ Фронзи технически верен (в конце концов, это то, о чем я просил), лучшее решение - не взломать, как SWIG выполняет кастинг, а передать -fno-strict-aliasing в gcc.
-fno-strict-aliasing
Похоронен в документах SWIG, он специально говорит, что делать :
Важно Если вы собираетесьчтобы использовать оптимизацию, включенную с помощью gcc (например, -O2), убедитесь, что вы также компилируете с -fno-strict-aliasing.Оптимизация GCC стала более агрессивной, начиная с gcc-4.0, и приведет к тому, что код завершится неудачно с включенной строгой оптимизацией алиасинга.Подробности смотрите в разделе C / C ++ to Java .
Важно
Если вы собираетесьчтобы использовать оптимизацию, включенную с помощью gcc (например, -O2), убедитесь, что вы также компилируете с -fno-strict-aliasing.Оптимизация GCC стала более агрессивной, начиная с gcc-4.0, и приведет к тому, что код завершится неудачно с включенной строгой оптимизацией алиасинга.Подробности смотрите в разделе C / C ++ to Java .
Вы можете использовать карту типов. См. Документ здесь для получения дополнительной информации. Вероятно, что-то похожее на код ниже.
%typemap(out) TYPE * %{ *($&1_ltype)&$result = (jlong)$1; %}