2012-05-16 30 views
27

Tôi có một chương trình thử nghiệm đơn giản mà khi tôi chạy tôi nhận được:libaio.so.1: không thể mở được chia sẻ tập tin đối tượng

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

tôi liên kết nó như thế này:

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

LD_LIBRARY_PATH My chứa này:

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

/usr/lib vẻ như thế này:

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 

Sản lượng 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 

Tôi hy vọng rằng tôi đang thiếu một cái gì đó đơn giản ở đây. Gói instantclient oracle xuất hiện để yêu cầu libaio, nhưng điều đó dường như đã được cài đặt rồi, vậy vấn đề là gì?

+1

bài đầu ra của '$ ldd hello'. – trojanfoe

+0

Dường như bạn cần phiên bản 64-bit của thư viện mà bạn không có. –

Trả lời

33

Dường như không khớp 32/64 bit. Đầu ra ldd cho thấy chủ yếu là các thư viện từ /lib64 được chọn. Điều đó sẽ chỉ ra rằng bạn đã cài đặt một phiên bản 64 bit của máy khách Oracle và đã tạo ra một thực thi 64 bit. Nhưng libaio.so có lẽ là một thư viện 32 bit và không thể được sử dụng cho ứng dụng của bạn.

Vì vậy, bạn cần phiên bản 64 bit của libaio hoặc bạn tạo phiên bản ứng dụng 32 bit.

+32

Trên hệ thống 64 bit Ubuntu 12.04 của tôi, tôi đã cài đặt phiên bản 32 bit của thư viện này. Có lẽ tôi đã có nó bởi vì nó là một sự phụ thuộc của một số phần mềm 32 bit khác. Đơn giản chỉ cần chạy "apt-get install libaio1" sẽ kéo trong phiên bản 64 bit là tốt. – amarillion

+5

@amarillion - Tôi có thể xác nhận rằng "apt-get install libaio1" đã khắc phục sự cố trên Ubuntu 12.04 64 bit. Cảm ơn. – SteveT

0

Ở đây trên openSuse 12.3, giải pháp đã cài đặt phiên bản 32-bit của libaio. Oracle dường như cần điều này ngay bây giờ, mặc dù trên 12.1 nó chạy mà không có phiên bản 32-bit.

55

Loại sau:

sudo apt-get install libaio1 libaio-dev 

hoặc

sudo yum install libaio 
+4

cái này đã giải quyết được vấn đề của tôi! – confiq

+0

Cũng có thể thực hiện "sudo apt search libaio" để tìm kiếm các mục <== Lưu ý "apt" not "apt-get" –

0

Tôi đang gặp một vấn đề tương tự.

tôi thấy

conda cài đặt pyodbc

là sai!

khi tôi sử dụng

apt-get install python-pyodbc

tôi giải quyết vấn đề này.

0

tôi phải làm như sau (trong Kubuntu 16.04.3):

  1. Cài đặt thư viện: sudo apt-get install libaio1 libaio-dev
  2. Tìm nơi thư viện được cài đặt: sudo find/-iname 'libaio.a' -type f -> dẫn đến /usr/lib/x86_64-linux-gnu/libaio.a
  3. Thêm kết quả để biến môi trường: export LD_LIBRARY_PATH="/usr/lib/oracle/12.2/client64/lib:/usr/lib/x86_64-linux-gnu"