web-dev-qa-db-fra.com

libaio.so.1: impossible d'ouvrir le fichier d'objet partagé

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?

33
wytten

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.

35
Codo

Tapez ce qui suit:

Sudo apt-get install libaio1 libaio-dev

ou

Sudo yum install libaio
74

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.

http://help.directadmin.com/item.php?id=368

2
user2981810

Je devais faire ce qui suit (dans Kubuntu 16.04.3):

  1. Installez les bibliothèques: Sudo apt-get install libaio1 libaio-dev
  2. Recherchez l'emplacement de la bibliothèque: Sudo find / -iname 'libaio.a' -type f -> a abouti à /usr/lib/x86_64-linux-gnu/libaio.a
  3. Ajouter le résultat à la variable d'environnement: export LD_LIBRARY_PATH="/usr/lib/Oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
1
aemaem

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

0
mutex86

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

0
Good Will

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.

0
useher