2012-05-16 19 views
27

Ho un semplice programma di test che quando corro ottengo:libaio.so.1: non può aprire il file oggetto condiviso

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

i LINK in questo modo:

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

mio LD_LIBRARY_PATH contiene questo:

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

/usr/lib aspetto come questo:

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 

uscita di LDD ciao:

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 

spero che mi manca qualcosa di semplice qui. Il pacchetto oracle instantclient sembra richiedere libaio, ma sembra essere già installato quindi qual è il problema?

+1

inviare l'output di '$ ldd ciao'. – trojanfoe

+0

Sembra che tu abbia bisogno di una versione a 64 bit della libreria che non hai. –

risposta

33

Sembra una mancata corrispondenza 32/64 bit. L'output ldd indica che vengono selezionate principalmente le librerie da /lib64. Ciò indicherebbe che hai installato una versione a 64 bit del client Oracle e hai creato un eseguibile a 64 bit. Ma libaio.so è probabilmente una libreria a 32 bit e non può essere utilizzata per la tua applicazione.

Quindi è necessaria una versione a 64 bit di libaio oppure si crea una versione a 32 bit dell'applicazione.

+32

Sul mio sistema Ubuntu 12.04 a 64 bit, ho installato la versione a 32 bit di questa libreria. Probabilmente ce l'ho perché era una dipendenza di qualche altro software a 32 bit. Semplicemente eseguendo "apt-get install libaio1" si aprirà anche la versione a 64 bit. – amarillion

+5

@amarillion - Posso confermare che "apt-get install libaio1" ha risolto il problema su Ubuntu 64.04 a 64 bit. Grazie. – SteveT

0

Qui su un openSuse 12.3 la soluzione stava installando la versione a 32 bit di libaio in aggiunta. Oracle sembra averne bisogno ora, anche se in 12.1 funziona senza la versione a 32 bit.

55

Digitare il seguente:

sudo apt-get install libaio1 libaio-dev 

o

sudo yum install libaio 
+4

questo risolve il mio problema! – confiq

+0

Può anche fare "sudo apt search libaio" per cercare elementi <== Nota "apt" non "apt-get" –

0

Sto avendo un problema simile.

ho trovato

Conda installare pyodbc

è sbagliato!

quando uso

apt-get install python-pyodbc

Ho risolto questo problema.

0

ho dovuto fare le seguenti (in Kubuntu 16.04.3):

  1. installare le librerie: sudo apt-get install libaio1 libaio-dev
  2. Trova in cui è installata la libreria: sudo find/-iname 'libaio.a' -type f -> ha provocato /usr/lib/x86_64-linux-gnu/libaio.a
  3. Aggiungi il risultato alla variabile ambiente: export LD_LIBRARY_PATH="/usr/lib/oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
Problemi correlati