53

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

./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,但这似乎已经安装了,有什么问题吗?

4

8 回答 8

133

安装软件包:

sudo apt-get install libaio1 libaio-dev

或者

sudo yum install libaio
于 2014-05-20T10:25:46.000 回答
54

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

因此,您要么需要 64 位版本的 libaio,要么创建 32 位版本的应用程序。

于 2012-05-16T13:37:00.453 回答
5

万一没有 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

于 2018-12-30T22:35:02.710 回答
2

我有同样的问题,结果我没有安装库。

这个链接非常有用。

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

于 2014-05-08T01:47:48.407 回答
1

我必须执行以下操作(在 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"
于 2017-10-09T11:47:37.533 回答
0

在 openSuse 12.3 上,解决方案是另外安装 32 位版本的 libaio。Oracle 现在似乎需要这个,尽管它在 12.1 上运行时没有 32 位版本。

于 2013-08-09T06:14:33.603 回答
0

我有一个类似的问题。

我发现

康达安装pyodbc

是错的!

当我使用

apt-get 安装 python-pyodbc

我解决了这个问题。</p>

于 2015-12-08T09:49:47.357 回答
0
sudo yum install libnsl

为我工作。https://github.com/knapsu/plex-media-player-appimage/issues/13

于 2022-01-27T15:30:33.283 回答