web-dev-qa-db-ja.com

libaio.so.1:共有オブジェクトファイルを開けません

実行すると次のような簡単なテストプログラムがあります。

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

このようにリンクします:

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

私のLD_LIBRARY_PATHにはこれが含まれています:

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

/ usr/libは次のようになります。

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

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

ここで何か簡単なものが欠けていることを望んでいます。 Oracle InstantClientパッケージにはlibaioが必要なようですが、それはすでにインストールされているようですので、問題は何ですか?

36
wytten

32/64ビットの不一致のようです。 lddの出力は、主に/lib64が選択されます。これは、Oracleクライアントの64ビットバージョンをインストールし、64ビットの実行可能ファイルを作成したことを示します。しかし、libaio.soはおそらく32ビットライブラリであり、アプリケーションに使用することはできません。

したがって、libaioの64ビットバージョンが必要か、アプリケーションの32ビットバージョンを作成します。

38
Codo

次を入力します。

Sudo apt-get install libaio1 libaio-dev

または

Sudo yum install libaio
84

私は同じ問題を抱えていましたが、ライブラリをインストールしていないことがわかりました。

このリンクはとても役に立ちました。

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

2
user2981810

私は次のことをしなければなりませんでした(Kubuntu 16.04.3):

  1. ライブラリをインストールします:Sudo apt-get install libaio1 libaio-dev
  2. ライブラリがインストールされている場所を見つける:Sudo find / -iname 'libaio.a' -type f->結果は/usr/lib/x86_64-linux-gnu/libaio.a
  3. 結果を環境変数に追加します:export LD_LIBRARY_PATH="/usr/lib/Oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
1
aemaem

同様の問題が発生しています。

見つけた

conda pyodbcをインストールする

間違っている!

私が使うとき

apt-get install python-pyodbc

この問題を解決しました。

0
mutex86

Sudo特権がない場合でも、ライブラリをインストールする必要があります。

次を使用してソフトウェア/ライブラリのソースをダウンロードします。

apt-get source libaio

または

wget https://src.fedoraproject.org/lookaside/pkgs/libaio/libaio-0.3.110.tar.gz/2a35602e43778383e2f4907a4ca39ab8/libaio-0.3.110.tar.gz

ライブラリを解凍します

次のコマンドを使用して、ユーザー固有のライブラリにインストールします。

make prefix=`pwd`/usr install #(Copy from INSTALL file of libaio-0.3.110)

または

make prefix=/path/to/your/lib/libaio install

LibaioライブラリをアプリのLD_LIBRARY_PATHに含めます。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib/libaio/lib

これで、アプリはlibaio.so.1を見つけることができるはずです。

0
Good Will

このopenSuse 12.3では、ソリューションは32ビットバージョンのlibaioを追加でインストールしていました。 Oracleは現在これを必要としているようですが、12.1では32ビットバージョンなしで実行されます。

0
useher