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?
Advertisement
Answer
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.