2012-05-16 18 views
27

Tengo un programa de prueba sencilla que cuando corro me sale:libaio.so.1: fichero objeto no puede abrir compartida

./hello: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 

I enlazar así:

$(CC) $(CCFLAGS) -o hello hello.o -L../ocilib-3.9.3/src/.libs -L../instantclient_11_2 -locilib 

Mi LD_LIBRARY_PATH contiene esto:

LD_LIBRARY_PATH=../ocilib-3.9.3/src/.libs:../instantclient_11_2:/usr/lib 

/usr/lib se ve así:

Linux$ ls -l /usr/lib/libaio* 
lrwxrwxrwx 1 root root 15 Nov 5 2008 /usr/lib/libaio.so.1 -> libaio.so.1.0.1 
-rwxr-xr-x 1 root root 2632 Sep 16 2005 /usr/lib/libaio.so.1.0.0 
-rwxr-xr-x 1 root root 2628 Sep 16 2005 /usr/lib/libaio.so.1.0.1 

salida de hola LDD:

libocilib.so.3 => ../ocilib-3.9.3/src/.libs/libocilib.so.3 (0x0000002a95558000) 
libc.so.6 => /lib64/tls/libc.so.6 (0x0000003811200000) 
libclntsh.so.11.1 => ../instantclient_11_2/libclntsh.so.11.1 (0x0000002a956c4000) 
/lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000) 
libnnz11.so => ../instantclient_11_2/libnnz11.so (0x0000002a97f56000) 
libdl.so.2 => /lib64/libdl.so.2 (0x0000003811500000) 
libm.so.6 => /lib64/tls/libm.so.6 (0x0000003811700000) 
libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x0000003811b00000) 
libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003819000000) 
libaio.so.1 => not found 

espero que me falta algo sencillo aquí. El paquete de Oracle instantclient parece requerir libaio, pero parece que ya está instalado, entonces, ¿cuál es el problema?

+1

Deja la salida del '$ ldd hola'. – trojanfoe

+0

Parece que necesita una versión de 64 bits de la biblioteca que no tiene. –

Respuesta

33

Parece una discrepancia de 32/64 bits. El resultado de ldd muestra que se eligen principalmente bibliotecas de /lib64. Eso indicaría que ha instalado una versión de 64 bits del cliente Oracle y ha creado un ejecutable de 64 bits. Pero libaio.so es probablemente una biblioteca de 32 bits y no se puede utilizar para su aplicación.

Por lo tanto, necesita una versión de 64 bit de libaio o puede crear una versión de 32 bits de su aplicación.

+32

En mi sistema Ubuntu 12.04 de 64 bits, tenía instalada la versión de 32 bits de esta biblioteca. Probablemente lo tuve porque era una dependencia de otro software de 32 bits. Simplemente ejecutando "apt-get install libaio1" también se obtendría la versión de 64 bits. – amarillion

+5

@amarillion - Puedo confirmar que "apt-get install libaio1" solucionó el problema en Ubuntu 12.04 de 64 bits. Gracias. – SteveT

0

Aquí en un openSuse 12.3 la solución fue la instalación de la versión de 32 bits de libaio, además. Oracle parece necesitar esto ahora, aunque en 12.1 se ejecuta sin la versión de 32 bits.

55

Escriba lo siguiente:

sudo apt-get install libaio1 libaio-dev 

o

sudo yum install libaio 
+4

¡este resolvió mi problema! – confiq

+0

También se puede hacer "sudo apt search libaio" para buscar elementos <== Nota "apt" no "apt-get" –

0

estoy teniendo un problema similar.

He encontrado

Conda instalar pyodbc

está mal!

cuando uso

apt-get install python-pyodbc

He resuelto este problema.

0

que tenía que hacer lo siguiente (en Kubuntu 16.04.3):

  1. instalar las bibliotecas: sudo apt-get install libaio1 libaio-dev
  2. Encuentra donde está instalada la biblioteca: sudo find/-iname 'libaio.a' -type f -> resultó en /usr/lib/x86_64-linux-gnu/libaio.a
  3. Añadir resultado a la variable de entorno: export LD_LIBRARY_PATH="/usr/lib/oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
Cuestiones relacionadas