Я пытаюсь скомпилировать библиотеку Java, которая использует JNI. Когда я запускаю программу, я вижу катастрофический отказ с UnsatisfiedLinkError, который заявляет, что конкретный метод не мог быть найден в DLL.
На более близком контроле я узнал, что g ++, который я использую для компиляции и соединения, исказил мои имена методов путем добавления суффиксов такой как "@8" или "@16" к именам методов. Кто-либо знает, что корректные параметры компилятора отключают искажение имени?Заранее спасибо!
Править: Я использую MinGW через Eclipse + плагин CDT.
Для работы вызовов JNI с Windows DLL, скомпилированных с GCC, необходимо добавить в GCC параметр add-stdcall-alias на фазе линковки:
gcc -Wl,--add-stdcall-alias
Который добавит в DLL правильные имена функций и, таким образом, включит вызовы через JNI.
.