2010-03-09 40 views
8

Al cargar un archivo DLL, que estoy recibiendo la siguiente excepción:Problema al cargar un archivo de biblioteca DLL ... java.lang.UnsatisfiedLinkError: No se puede cargar la biblioteca

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
    D:\Transliteration\rlpnc-3.1.0-sdk-ia32-w32-msvc80\rlp\bin\ia32-w32-msvc80\btrntjni.dll: 
    The system cannot find message text for message number 0x%1 in the message file for %2 

at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.load0(Unknown Source) 
at java.lang.System.load(Unknown Source) 
at com.basistech.util.internal.Native.loadLibrary(Unknown Source) 
at com.basistech.rnt.jni.<clinit>(Unknown Source) 
at com.basistech.rnt.RNTEnvironment.<init>(Unknown Source) 
at SampleTranslator.<init>(TranslateNameSample.java:88) 
at TranslateNameSample.main(TranslateNameSample.java:62) 

no está seguro acerca de la causa raíz del problema ¿Alguien puede ayudarme a resolver este problema?

Gracias, Bhaskar

+0

¿Ya descubrió el motivo de esto? – fish

Respuesta

-1

Compruebe que el "java.library.path" contiene la carpeta que contiene el archivo .dll.
En la máquina de Windows está relacionado con PATH.
http://www.inonit.com/cygwin/jni/helloWorld/load.html

+0

Sí, contiene pero aún aparece el problema :( –

+0

Por favor, publique el CLASSPATH completo – Padmarag

+0

Aquí va .. D: \ apache-ant-1.8.0 \ lib; D: \ Transliteration \ rlp-6.5.0-sdk-ia32-w32-msvc80 \ rlp \ lib \ ia32-w32-msvc80; D: \ Transliteration \ rlpnc-3.1.0-sdk-ia32-w32- msvc80 \ rlp \ lib \ ia32-w32-msvc80; D: \ Transliteration \ rlpnc-3.1.0-sdk-ia32-w32-msvc80 \ rlpnc \ samples \ java; D: \ Transliteration \ rlp-6.5.0-sdk- ia32-w32-msvc80 \ rlp \ bin \ ia32-w32-msvc80; D: \ Transliteration \ rlpnc-3.1.0-sdk-ia32-w32-msvc80 \ rlp \ bin \ ia32-w32-msvc80 ;. –

2

Esto no tiene que hacer nada con el classpath. Colocar el archivo DLL en el directorio actual, en uno de los directorios listados en la variable de entorno PATH, o, lo mejor de todo, en la ruta de búsqueda de biblioteca nativa , establecido mediante el java.library.path propiedad del sistema:

java -Djava.library.path=C:\MyNativeLibs MyMainClass 
+0

El directorio ya se encuentra en la variable de entorno PATH. Pero aún estoy recibiendo este error. Para hacer este sencillo, aquí está el código que estoy tratando de correr .. TestClass public class { \t public void main (String [] args) {estáticas \t \t System.loadLibrary ("btrntjni"); \t}} –

+0

La siguiente excepción se acerca .. Excepción en el hilo "principal" java.lang.UnsatisfiedLinkError: D: \ transliteración \ rlpnc-3,1,0-SDK-IA32-w32-MSVC80 \ rlpnc \ muestras \ java \ btrntjni.dll: El sistema no puede encontrar el texto del mensaje para el número de mensaje 0x% 1 en el archivo de mensaje para% 2 \t en java.lang.ClassLoader $ NativeLibrary.load (Método nativo) \t en java.lang.ClassLoader .loadLibrary0 (origen desconocido) \t en java.lang.ClassLoader.loadLibrary (origen desconocido) \t en java.lang.Runtime.loadLibrary0 (origen desconocido) \t en java.lang.System.loadLib rary (Fuente desconocida) \t en testClass.main (testClass.java:7) –

1

además de comprobar su están poniendo la ruta de acceso al archivo DLL en la variable de entorno correcta también debe comprobar lo siguiente:

  • la DLL que va a cargar tiene todas sus dependencias satisfecho. En otras palabras, si esta DLL depende de otras DLL, asegúrese de que esas DLL también se puedan encontrar.

  • Si el DLL se carga utiliza un manifiesto para especificar un DLL específico, asegúrese de que DLL (de la versión especificada en el manifiesto) también está en la máquina (o en el GAC, si es necesario) y se puede encontrar

  • Compruebe que todas las funciones de DLL referidas en su código de Java estén definidas y exportadas correctamente y exporte los mismos tipos de datos que los que espera su código de Java. Esto no detendrá la carga de la DLL, pero puede arruinar la siguiente etapa: resolver direcciones de enlace o realizar funciones que deberían funcionar, fallar de formas inesperadas.

Mucha diversión que se puede tener con esto - muchas cosas pequeñas que te harán tropezar. Tuve que lidiar con esto hace unos años jugando con un paquete de texto a voz (en C & C++ en una DLL) trabajando con diferentes versiones de Java con estilos JNI viejos y nuevos. ¡Que desastre!

1

No he visto este problema yo mismo, pero en el mensaje de error parece que falta alguna dependencia necesaria de la DLL o es incorrecta.

Esta herramienta podría ayudar: http://www.dependencywalker.com/

5

Trabajo para la empresa que fabrica el producto que está tratando de usar. Hemos visto este error cuando se ha instalado contra una versión incompatible de la capa subyacente que enviamos con él, debido a la falta de archivos DLL dependientes, como otros han sugerido. No dude en ponerse en contacto con nuestro equipo de soporte para obtener más ayuda.

0

Para mí, la adición de la ruta dll a las opciones de VM en mi IDE funcionó.

Cuestiones relacionadas