2010-01-02 8 views
5

Ich versuche, eine Java-Bibliothek zu kompilieren, die JNI verwendet. Wenn ich das Programm starte, sehe ich einen Absturz mit einem UnatisfiedLinkError, der besagt, dass eine bestimmte Methode in der DLL nicht gefunden wurde.g ++: So entmagnetisieren exportierte Symbole

Bei näherer Betrachtung habe ich herausgefunden, dass g ++, das ich zum Kompilieren und Verknüpfen verwendet, meine Methodennamen durch Hinzufügen von Suffixen wie "@ 8" oder "@ 16" zu den Methodennamen verändert. Kennt jemand die richtigen Compiler-Optionen, um den Namen Mangling zu deaktivieren? Danke im Voraus!

EDIT: Ich benutze MinGW durch Eclipse + CDT-Plugin.

Antwort

12

Für JNI-Aufrufe mit Windows-DLLs mit GCC kompiliert arbeiten Sie ein Add-stdcall-Alias-Parameter auf GCC auf die Verknüpfung Phase hinzufügen müssen:

gcc -Wl,--add-stdcall-alias 

Welche korrekten Funktionsnamen der DLL hinzufügen und somit Anrufe über JNI ermöglichen.

+0

Vielen Dank! Das hat mein Problem endlich gelöst. Mit diesem Parameter gibt es eine dekorierte und eine undekorierte Version für jede Methode in der DLL, und die Java-Programme funktionieren: D –

+0

@Mavrik Vielen Dank für das Ausfüllen, wusste ich das Problem, aber nicht die Lösung. – bmargulies

Verwandte Themen