2012-05-16 68 views
27

我有一个简单的测试程序,当我跑我得到: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打招呼:

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,但似乎已经安装好了,那么问题是什么?

+1

后的输出'$ ldd hello'。 – trojanfoe

+0

它看起来像你需要一个你没有的库的64位版本。 –

回答

33

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

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

+32

在我的64位Ubuntu 12.04系统上,我安装了该库的32位版本。可能我有它,因为它是一些其他32位软件的依赖。简单地运行“apt-get install libaio1”也会引入64位版本。 – amarillion

+5

@amarillion - 我可以确认“apt-get install libaio1”修复了64位Ubuntu 12.04上的问题。谢谢。 – SteveT

0

在openSuse 12.3上,此解决方案还安装了32位版本的libaio。甲骨文现在似乎需要这样做,尽管在12.1版本中它运行时没有32位版本。

55

键入以下内容:

sudo apt-get install libaio1 libaio-dev 

sudo yum install libaio 
+4

这一个解决了我的问题! – confiq

+0

也可以执行“sudo apt search libaio”来搜索项目<==注意“apt”不是“apt-get” –

0

我有一个类似的问题。

我发现

畅达安装pyodbc

是错误的!

当我使用

apt-get的安装python-pyodbc

我解决了这个问题。

0

我不得不做以下(在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"
相关问题