61

I have a simple test program that when I run I get:

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

I link it like this:

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

My LD_LIBRARY_PATH contains this:

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

/usr/lib looks like this:

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

Output of 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

I'm hoping that I'm missing something simple here. The oracle instantclient package appears to require libaio, but that seems to be installed already so what's the problem?

wytten
  • 2,800
  • 1
  • 21
  • 38

8 Answers8

154

Install the packages:

sudo apt-get install libaio1 libaio-dev

or

sudo yum install libaio
cryanbhu
  • 4,780
  • 6
  • 29
  • 47
Praveen Kumar K R
  • 1,762
  • 2
  • 11
  • 7
54

It looks like a 32/64 bit mismatch. The ldd output shows that mainly libraries from /lib64 are chosen. That would indicate that you have installed a 64 bit version of the Oracle client and have created a 64 bit executable. But libaio.so is probably a 32 bit library and cannot be used for your application.

So you either need a 64 bit version of libaio or you create a 32 bit version of your application.

Codo
  • 75,595
  • 17
  • 168
  • 206
  • 43
    On my 64 bit Ubuntu 12.04 system, I had the 32-bit version of this library installed. Probably I had it because it was a dependency of some other 32 bit software. Simply running "apt-get install libaio1" would pull in the 64 bit version as well. – amarillion Dec 13 '12 at 16:09
  • 11
    @amarillion - I can confirm that "apt-get install libaio1" fixed the problem on 64-bit Ubuntu 12.04. Thanks. – SteveT Oct 24 '13 at 18:34
  • 1
    I can confirm `apt install libaio1` solves it on ubuntu 18.04. – WesternGun May 17 '21 at 10:19
5

In case one does not have sudo privilege, but still needs to install the library.

Download source for the software/library using:

apt-get source libaio

or

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

unzip the library

Install with the following command to user-specific library:

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

or

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

Include libaio library into LD_LIBRARY_PATH for your app:

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

Now, your app should be able to find libaio.so.1

Good Will
  • 1,220
  • 16
  • 10
2

I had the same problem, and it turned out I hadn't installed the library.

this link was super usefull.

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

user2981810
  • 379
  • 4
  • 11
1

I had to do the following (in Kubuntu 16.04.3):

  1. Install the libraries: sudo apt-get install libaio1 libaio-dev
  2. Find where the library is installed: sudo find / -iname 'libaio.a' -type f --> resulted in /usr/lib/x86_64-linux-gnu/libaio.a
  3. Add result to environment variable: export LD_LIBRARY_PATH="/usr/lib/oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"
aemaem
  • 935
  • 10
  • 20
0

Here on a openSuse 12.3 the solution was installing the 32-bit version of libaio in addition. Oracle seems to need this now, although on 12.1 it run without the 32-bit version.

useher
  • 1
  • 1
  • 4
0

I'm having a similar issue.

I found

conda install pyodbc

is wrong!

when I use

apt-get install python-pyodbc

I solved this problem。

mutex86
  • 59
  • 6
0
sudo yum install libnsl

worked for me. https://github.com/knapsu/plex-media-player-appimage/issues/13

Petter Friberg
  • 21,252
  • 9
  • 60
  • 109