2010-01-02 11 views
5

Próbuję skompilować bibliotekę Java, która używa JNI. Kiedy uruchamiam program, widzę awarię z UnsatisfiedLinkError, która mówi, że określonej metody nie można znaleźć w bibliotece DLL.g ++: Jak rozłączyć wyeksportowane symbole

Po bliższym przyjrzeniu się dowiedziałem się, że g ++, którego używam do kompilacji i łączenia, zawikłało moje nazwy metod poprzez dodanie przyrostków takich jak "@ 8" lub "@ 16" do nazw metod. Czy ktoś zna poprawne opcje kompilatora, aby wyłączyć mangling nazwy? Z góry dziękuję!

EDIT: Używam wtyczki MinGW przez wtyczkę Eclipse + CDT.

Odpowiedz

12

Dla JNI wzywa do współpracy z DLL systemu Windows skompilowane z GCC trzeba dodać parametr add-stdcall-alias do GCC na fazie łączącej:

gcc -Wl,--add-stdcall-alias 

Które doda poprawnych nazw funkcji w bibliotece DLL, a tym samym umożliwić połączenia za pośrednictwem JNI.

+0

Wielkie dzięki! To w końcu rozwiązało mój problem. W tym parametrze jest dostępna dekorowana i nieskażona wersja dla każdej metody w bibliotece DLL, a programy Java działają: D –

+0

@Mavrik dziękuję za wypełnienie tego, znałem problem, ale nie rozwiązanie. – bmargulies

Powiązane problemy