g ++: come unmangle simboli esportati
-
22-09-2019 - |
Domanda
Sto cercando di compilare una libreria Java che utilizza JNI. Quando avvio il programma, vedo un incidente con un'UnsatisfiedLinkError, che dice che un particolare metodo non è stato trovato nella DLL.
A ben vedere, ho scoperto che g ++, che io uso per la compilazione e il collegamento, straziati i miei nomi di metodo con l'aggiunta di suffissi come "@ 8" o "@ 16" per i nomi dei metodi. Qualcuno sa le opzioni del compilatore corrette per disattivare il nome storpiatura? Grazie in anticipo!
Modifica :. Sto usando MinGW attraverso Eclipse CDT + plug-in
Soluzione
Per JNI chiama a lavorare con le DLL di Windows compilati con GCC è necessario aggiungere un parametro di add-stdcall-alias di GCC su fase di collegamento:
gcc -Wl,--add-stdcall-alias
a cui si aggiungeranno i nomi delle funzioni corrette per la DLL e quindi abilitare le chiamate tramite JNI.