2010-01-02 15 views
5

Estoy intentando compilar una biblioteca Java que usa JNI. Cuando inicio el programa, veo un bloqueo con UnsatisfiedLinkError, que dice que no se pudo encontrar un método en particular en la DLL.g ++: Cómo destrabar símbolos exportados

En una inspección más cercana, descubrí que g ++, que utilizo para compilación y vinculación, mutiló los nombres de mis métodos agregando sufijos como "@ 8" o "@ 16" a los nombres de los métodos. ¿Alguien sabe las opciones correctas del compilador para desactivar el cambio de nombre? ¡Gracias por adelantado!

EDIT: Estoy usando MinGW a través del plugin Eclipse + CDT.

Respuesta

12

Para llamadas JNI para trabajar con archivos DLL de Windows compilados con GCC es necesario agregar un parámetro adicional stdcall-alias a GCC en fase de vinculación:

gcc -Wl,--add-stdcall-alias 

que se sumarán los nombres de funciones correctas a la DLL y por lo tanto habilitar llamadas a través de JNI.

+0

¡Muchas gracias! Esto finalmente resolvió mi problema. Con este parámetro, hay una versión decorada y una no decorada para cada método en el DLL, y los programas de Java funcionan: D –

+0

@Mavrik gracias por completar esto, sabía el problema pero no la solución. – bmargulies

Cuestiones relacionadas