while what library ld_library_path example error shared-libraries shared

shared libraries - what - Error al cargar las bibliotecas compartidas



ld_library_path windows (5)

Copié todos los archivos de la biblioteca de / opt / lib en / usr / lib y el programa funciona ahora. Gracias por la respuesta.

Estoy ejecutando eclipse en Ubuntu usando un compilador g ++ y estoy tratando de ejecutar un programa de ejemplo que utiliza xerces.

La compilación no produjo errores, sin embargo, cuando intenté ejecutar el programa, recibiría este error:

error while loading shared libraries: libxerces-c-3.1.so: cannot open shared object file: No such file or directory

libxerces-c-3.1.so está en el directorio /opt/lib que he incluido como una biblioteca en eclipse. El archivo está ahí cuando revisé la carpeta. Cuando realizo un echo $LD_LIBRARY_PATH , /opt/lib también aparece en la lista.

¿Alguna idea de dónde está el problema? Gracias.

Un comando ldd libxerces-c-3.1.so produce el siguiente resultado:

linux-vdso.so.1 => (0x00007fffeafff000) libnsl.so.1 => /lib/libnsl.so.1 (0x00007fa3d2b83000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa3d2966000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fa3d265f000) libm.so.6 => /lib/libm.so.6 (0x00007fa3d23dc000) libc.so.6 => /lib/libc.so.6 (0x00007fa3d2059000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fa3d1e42000) /lib64/ld-linux-x86-64.so.2 (0x00007fa3d337d000)


Ejecute ldd libxerces-c-3.1.so y examine la salida para ver si se pueden encontrar todas las dependencias.


Hay muchas maneras de hacer esto, la mayoría ya se mencionó aquí. PERO desea evitar copiar accidentalmente los archivos de su biblioteca en / sobre los del sistema . Esto se hace fácilmente ya que las personas tienen poca imaginación para hacer nombres únicos originales para sus bibliotecas.

Así que hay un par de cosas para pensar:

  • ¿Necesita que estos archivos sean una parte permanente de su sistema?
  • ¿Solo necesita instalar para realizar pruebas y actualizaciones frecuentes?
  • ¿Solo los necesitas para ejecutar ese comando en particular una o dos veces?
  • ¿Dónde están ubicadas tus bibliotecas nativas?

Para encontrar las diferentes ubicaciones de la biblioteca en su sistema (además de usar find), consulte aquí:

cat /etc/ld.so.conf cat /etc/ld.so.conf.d/*

En Linux hay algunos lugares estándar:

/lib # for base system (don''t use this!) /usr/lib # for package manger installed apps /usr/local/lib # for user installed apps

Hay muchos otros, pero lo más probable es que te quedes con /usr/local/lib . A continuación, debe indicar a su sistema dónde encontrar estas bibliotecas. La manera genial de hacer esto con el sistema (quien sabe lo que está haciendo) es usar ldconfig , sin embargo, puedes hacer cosas de las que te arrepientas, si cometes un error aquí. La forma más segura de usar ese comando es usar los indicadores -v -n para hacer el comando detallado y para especificar qué directorio de biblioteca necesita agregar.

sudo ldconfig -v -n /usr/local/lib/your-uber-libs

Hecho. Pero si solo quieres probar algo, entonces usa tu LD_LIBRARY_PATH directamente desde la línea de comandos, así:

LD_LIBRARY_PATH=/usr/local/lib/your-uber-libs ./your_uber_command

Alternativamente, agregue lo siguiente a su script .bashrc .

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/your-uber-libs

Ahora puede ejecutar su comando enlazado dinámicamente.


Intenta instalar la librería libxerces-c3.1 como . Utilice el comando mencionado a continuación para instalar la biblioteca.

sudo apt-get install libxerces-c3.1

Esto funcionó como un encanto para mí.


Intente ejecutar ldconfig como root para ver si resuelve el problema.