g ++: Как не исказить экспортируемые символы

Я пытаюсь скомпилировать библиотеку Java, которая использует JNI. Когда я запускаю программу, я вижу катастрофический отказ с UnsatisfiedLinkError, который заявляет, что конкретный метод не мог быть найден в DLL.

На более близком контроле я узнал, что g ++, который я использую для компиляции и соединения, исказил мои имена методов путем добавления суффиксов такой как "@8" или "@16" к именам методов. Кто-либо знает, что корректные параметры компилятора отключают искажение имени?Заранее спасибо!

Править: Я использую MinGW через Eclipse + плагин CDT.

5
задан python dude 2 January 2010 в 20:53
поделиться

1 ответ

Для работы вызовов JNI с Windows DLL, скомпилированных с GCC, необходимо добавить в GCC параметр add-stdcall-alias на фазе линковки:

gcc -Wl,--add-stdcall-alias

Который добавит в DLL правильные имена функций и, таким образом, включит вызовы через JNI.

.
12
ответ дан 13 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: