g++: Как да демонтирам експортираните символи

Опитвам се да компилирам Java библиотека, която използва JNI. Когато стартирам програмата, виждам срив с UnsatisfiedLinkError, който казва, че определен метод не може да бъде намерен в DLL.

При по-внимателно разглеждане открих, че g++, който използвам за компилиране и свързване, обезобрази имената на методите ми, като добави суфикси като "@8" или "@16" към имената на методите. Някой знае ли правилните опции на компилатора, за да деактивира изкривяването на името? Благодаря предварително!

РЕДАКТИРАНЕ: Използвам MinGW чрез Eclipse + CDT плъгин.


person python dude    schedule 02.01.2010    source източник


Отговори (1)


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

gcc -Wl,--add-stdcall-alias

Което ще добави правилни имена на функции към DLL и по този начин ще позволи извиквания чрез JNI.

person Mavrik    schedule 02.01.2010
comment
Благодаря много! Това най-накрая реши проблема ми. С този параметър има декорирана и недекорирана версия за всеки метод в DLL и Java програмите работят :D - person python dude; 03.01.2010
comment
@Mavrik благодаря ти, че попълни това, знаех проблема, но не и решението. - person bmargulies; 03.01.2010