libaio.so.1:无法打开共享对象文件

wyt*_*ten 38 linux oracle oracle-call-interface

我有一个简单的测试程序,当我运行时,我得到:

./hello: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我这样链接:

$(CC) $(CCFLAGS) -o hello hello.o -L../ocilib-3.9.3/src/.libs -L../instantclient_11_2 -locilib
Run Code Online (Sandbox Code Playgroud)

我的LD_LIBRARY_PATH包含:

LD_LIBRARY_PATH=../ocilib-3.9.3/src/.libs:../instantclient_11_2:/usr/lib
Run Code Online (Sandbox Code Playgroud)

/ 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
Run Code Online (Sandbox Code Playgroud)

输出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
Run Code Online (Sandbox Code Playgroud)

我希望我在这里遗漏一些简单的东西.oracle instantclient包似乎需要libaio,但似乎已经安装了,那么问题是什么?

小智 88

输入以下内容:

sudo apt-get install libaio1 libaio-dev
Run Code Online (Sandbox Code Playgroud)

要么

sudo yum install libaio
Run Code Online (Sandbox Code Playgroud)


Cod*_*odo 40

它看起来像32/64位不匹配.所述LDD输出显示主要库从/lib64被选择.这表明您已经安装了64位版本的Oracle客户端并创建了64位可执行文件.但libaio.so可能是32位库,不能用于您的应用程序.

因此,您需要64位版本的libaio,或者创建32位版本的应用程序.

  • 在我的64位Ubuntu 12.04系统上,我安装了这个库的32位版本.可能我有它,因为它是一些其他32位软件的依赖.简单地运行"apt-get install libaio1"也会引入64位版本. (37认同)
  • @amarillion - 我可以确认"apt-get install libaio1"修复了64位Ubuntu 12.04上的问题.谢谢. (7认同)

Goo*_*ill 5

如果没有 sudo 权限,但仍需要安装库。

使用以下方法下载软件/库的源代码:

apt-get source libaio
Run Code Online (Sandbox Code Playgroud)

或者

wget https://src.fedoraproject.org/lookaside/pkgs/libaio/libaio-0.3.110.tar.gz/2a35602e43778383e2f4907a4ca39ab8/libaio-0.3.110.tar.gz
Run Code Online (Sandbox Code Playgroud)

解压缩库

使用以下命令安装到用户特定的库:

make prefix=`pwd`/usr install #(Copy from INSTALL file of libaio-0.3.110)
Run Code Online (Sandbox Code Playgroud)

或者

make prefix=/path/to/your/lib/libaio install
Run Code Online (Sandbox Code Playgroud)

将 libaio 库包含到您的应用程序的 LD_LIBRARY_PATH 中:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib/libaio/lib
Run Code Online (Sandbox Code Playgroud)

现在,您的应用应该能够找到 libaio.so.1