2010-01-02 10 views
5

J'essaie de compiler une bibliothèque Java qui utilise JNI. Lorsque je démarre le programme, je vois un crash avec UnsatisfiedLinkError, qui indique qu'une méthode particulière n'a pas pu être trouvée dans la DLL. En y regardant de plus près, j'ai découvert que g ++, que j'utilise pour la compilation et la liaison, a tronqué mes noms de méthodes en ajoutant des suffixes tels que "@ 8" ou "@ 16" aux noms des méthodes. Est-ce que quelqu'un sait les bonnes options du compilateur pour désactiver le nom mangling? Merci d'avance!g ++: Comment démonter les symboles exportés

EDIT: J'utilise MinGW via le plugin Eclipse + CDT.

Répondre

12

Pour JNI appels à travailler avec DLL Windows compilé avec GCC vous devez ajouter un paramètre add-stdcall-alias GCC sur la phase reliant:

gcc -Wl,--add-stdcall-alias 

qui ajoutera les noms de fonctions correctes à la DLL et donc activer les appels via JNI.

+0

Merci beaucoup! Cela a finalement résolu mon problème. Avec ce paramètre, il y a une version décorée et non décorée pour chaque méthode dans la DLL, et les programmes Java fonctionnent: D –

+0

@Mavrik merci de remplir cela, je connaissais le problème mais pas la solution. – bmargulies