2011-08-22 50 views
25

Participo en el desarrollo de un proyecto Java, que utiliza algunos componentes C++, por lo que necesito Jacob.dll. (En Windows 7)¿Qué es LD_LIBRARY_PATH y cómo usarlo?

me siguen dando java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path no importa donde pongo Jacob.dll ....

Busqué posibles decisiones y el que no lo he probado hasta ahora es establecer la variable LD_LIBRARY_PATH , apuntando al archivo .dll.

Tengo poca experiencia y no estoy familiarizado con cuál debería ser el significado y el uso de esa variable. ¿Me pueden ayudar?

+0

Google: "java.library.path" ... haga clic en cualquier enlace que habla de esto y dll ... – Nim

+1

y aquí hay uno que hice antes: http://www.inonit.com/cygwin/jni/helloWorld/load.html – Nim

+0

Si está usando Windows y necesita tener ese dll cargado, usar la variable de sistema "PATH" o soltar el dll en el directorio de Windows/System32. LD_LIBRARY_PATH no se usa en Windows. –

Respuesta

24

Normalmente debe establecer java.library.path en la línea de comandos de la JVM:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass 
+0

¡Esto correcto! (+1) –

+0

mmm ... pero ... ¿qué es LD_LIBRARY_PATH? – JPCF

33

LD_LIBRARY_PATH es la variable de entorno predefinida en Linux/Unix que establece la ruta a la que debe mirar el vinculador al vincular bibliotecas dinámicas/bibliotecas compartidas.

LD_LIBRARY_PATH contiene una lista de rutas separadas por dos puntos y el vinculador da prioridad a estas rutas sobre las rutas de biblioteca estándar /lib y /usr/lib. Se seguirán buscando las rutas estándar, pero solo después de que se haya agotado la lista de rutas en LD_LIBRARY_PATH.

La mejor manera de utilizar LD_LIBRARY_PATH es configurarlo en la línea de comandos o en el script inmediatamente antes de ejecutar el programa. De esta forma, el nuevo LD_LIBRARY_PATH se aisló del resto de su sistema.

Ejemplo de Uso:

$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path" 
$ ./program 

Dado que se habla de .dll usted está en un sistema de ventanas y una .dll debe ser colocado en un camino que las búsquedas de enlazador en tiempo de enlazado, en las ventanas de este camino es establecido por la variable de entorno PATH, así que agrega que .dll a PATH y debería funcionar bien.

7

LD_LIBRARY_PATH es específico de Linux y es una variable de entorno que apunta a los directorios donde el cargador dinámico debería buscar bibliotecas compartidas.

Intenta agregar el directorio donde está tu .dll en la variable PATH. Windows buscará automáticamente en los directorios listen en esta variable de entorno. LD_LIBRARY_PATH probablemente no resolverá el problema (a menos que la JVM lo use, no sé de eso).

+0

Gracias, obviamente, no va a funcionar para mí. De lo contrario, agregar el elemento a la variable PATH fue algo que hice en primer lugar ... sin suerte hasta ahora :) – karla

+0

No soy un desarrollador de Java, pero podría intentar imprimir la variable java.library.path (con System. getProperty())? También podría tratar de establecer esta variable con el distintivo de línea de comando -D al iniciar la máquina virtual; puede incluso establecer esto en el tiempo de ejecución podría funcionar. Si está trabajando en Eclipse, hay una forma de establecer algo así como "Ubicaciones de la Biblioteca nativa" en la configuración de Ruta de compilación en las propiedades del proyecto. –

+2

¡No Linux! ¡Todos los Unix utilizan esta variable de entorno! ¡Tampoco es para enlazar, sino para cargar! Las bibliotecas vinculadas estáticas generalmente se dan en la línea de comando al vinculador, las cargadas dinámicas se buscan a través de LD_LIBRARY_PATH. Ver p. http://linuxmafia.com/faq/Admin/ld-lib-path.html –

1

Bueno, el mensaje de error que le indica qué hacer: añadir la ruta donde reside Jacob.dll a java.library.path. Puede hacerlo en la línea de comando como este:

java -Djava.library.path="dlls" ... 

(suponiendo Jacob.dll está en el "DLL" carpeta)

Véase también java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

+3

Después del inicio de JVM, no puede establecer 'java.library.path' de esta manera. –

Cuestiones relacionadas