2010-12-23 10 views
15

Estoy ejecutando eclipse en Ubuntu usando un compilador de g ++ y estoy intentando ejecutar un programa de ejemplo que utiliza xerces.Error al cargar bibliotecas compartidas

La construcción presentado ningún error sin embargo, cuando he tratado de ejecutar el programa, me gustaría recibir 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á allí cuando revisé la carpeta. Cuando realizo un echo $LD_LIBRARY_PATH, /opt/lib también aparece en la lista.

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

Un ldd libxerces-c-3.1.so rendimientos de mando 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) 
+0

Posible duplicado de [Error de Linux al cargar bibliotecas compartidas: no se puede abrir el archivo de objeto compartido: No existe dicho archivo o directorio] (http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries -cannot-open-shared-object-file-no-s) –

Respuesta

4

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

3

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

+0

He editado el tema con el resultado de un comando ldd. Soy bastante nuevo en Linux, así que no estoy muy seguro de lo que significa la salida. ¿Cómo sé si tengo todas las bibliotecas compartidas requeridas? ¿Son esos los que figuran con las flechas? – user459811

22

Intenta ejecutar ldconfig como root para ver si se resuelve el problema.

+4

¿Alguien podría explicar por qué funciona esto? –

+2

Intenté ejecutar 'sudo ldconfig', pero todavía no funciona – Nubcake

1

Intente instalar la biblioteca libxerces-c3.1 como. Use el comando mencionado a continuación para instalar la biblioteca.

sudo apt-get install libxerces-c3.1 

Esto funcionó como un encanto para mí.

1

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

por lo que hay un par de cosas en que pensar:

  • ¿Necesita estos archivos a ser una parte permanente de su sistema?
  • ¿Solo necesita instalarlo para realizar pruebas y actualizaciones frecuentes?
  • ¿Los necesita para ejecutar ese comando en particular una o dos veces?
  • ¿Dónde están ubicadas sus bibliotecas nativas?

para encontrar sus diversas ubicaciones de la biblioteca en su sistema (aparte de utilizar hallazgo), mira 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 muchas otros, pero lo más probable es que se quede con /usr/local/lib. A continuación, debe indicarle a su sistema dónde encontrar estas bibliotecas.El tipo genial de sistema (quién sabe lo que está haciendo) es hacer uso de ldconfig, sin embargo, puedes hacer cosas que lamentas, si cometes un error aquí. La forma más segura de usar ese comando es mediante el uso de los indicadores -v -n para que el comando sea prolijo y especifique qué directorio de biblioteca necesita agregar.

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

Listo. Pero si sólo desea probar algo, entonces en lugar de usar su línea de LD_LIBRARY_PATH directamente de comandos, así:

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

otra parte, añadir lo siguiente a su script .bashrc.

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

Ahora puede ejecutar su comando dinámicamente vinculado.

Cuestiones relacionadas