J'ai un programme de test simple qui, quand je cours, me donne:
./hello: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
Je le relie comme ceci:
$(CC) $(CCFLAGS) -o hello hello.o -L../ocilib-3.9.3/src/.libs -L../instantclient_11_2 -locilib
Mon LD_LIBRARY_PATH contient ceci:
LD_LIBRARY_PATH=../ocilib-3.9.3/src/.libs:../instantclient_11_2:/usr/lib
/ usr/lib ressemble à ceci:
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
Sortie de ldd hello:
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
J'espère que je manque quelque chose de simple ici. Le paquet Oracle instantclient semble nécessiter libaio, mais cela semble être déjà installé. Quel est le problème?
Cela ressemble à une incompatibilité 32/64 bits. La sortie ldd montre que les bibliothèques principalement choisies à partir de /lib64
sont choisies. Cela indiquerait que vous avez installé une version 64 bits du client Oracle et créé un exécutable 64 bits. Mais libaio.so
est probablement une bibliothèque 32 bits et ne peut pas être utilisé pour votre application.
Vous avez donc besoin d’une version 64 bits de libaio ou d’une version 32 bits de votre application.
Tapez ce qui suit:
Sudo apt-get install libaio1 libaio-dev
ou
Sudo yum install libaio
J'ai eu le même problème, et il s'est avéré que je n'avais pas installé la bibliothèque.
ce lien était super utile.
Je devais faire ce qui suit (dans Kubuntu 16.04.3):
Sudo apt-get install libaio1 libaio-dev
Sudo find / -iname 'libaio.a' -type f
-> a abouti à /usr/lib/x86_64-linux-gnu/libaio.a
export LD_LIBRARY_PATH="/usr/lib/Oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
J'ai un problème similaire.
J'ai trouvé
conda installer pyodbc
est faux!
quand j'utilise
apt-get installer python-pyodbc
J'ai résolu ce problème
Dans le cas où l'on ne dispose pas du privilège Sudo, mais qu'il reste à installer la bibliothèque.
Télécharger la source du logiciel/de la bibliothèque en utilisant:
apt-get source libaio
ou
wget https://src.fedoraproject.org/lookaside/pkgs/libaio/libaio-0.3.110.tar.gz/2a35602e43778383e2f4907a4ca39ab8/libaio-0.3.110.tar.gz
décompressez la bibliothèque
Installez avec la commande suivante dans la bibliothèque spécifique à l'utilisateur:
make prefix=`pwd`/usr install #(Copy from INSTALL file of libaio-0.3.110)
ou
make prefix=/path/to/your/lib/libaio install
Incluez la bibliothèque libaio dans LD_LIBRARY_PATH pour votre application:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib/libaio/lib
Maintenant, votre application devrait pouvoir trouver libaio.so.1
Ici sur un openSuse 12.3, la solution installait en plus la version 32 bits de libaio. Oracle semble en avoir besoin maintenant, bien que sur 12.1, il fonctionne sans la version 32 bits.