GNU/Linux >> Belajar Linux >  >> Linux

Kesalahan Linux saat memuat pustaka bersama:tidak dapat membuka file objek bersama:Tidak ada file atau direktori tersebut

Pustaka Anda adalah pustaka dinamis. Anda perlu memberi tahu sistem operasi di mana ia dapat menemukannya saat runtime.

Untuk melakukannya, kita perlu melakukan langkah-langkah mudah tersebut:

(1 ) Temukan di mana perpustakaan ditempatkan jika Anda tidak mengetahuinya.

sudo find / -name the_name_of_the_file.so

(2) Periksa keberadaan variabel lingkungan jalur perpustakaan dinamis (LD_LIBRARY_PATH )

$ echo $LD_LIBRARY_PATH

jika tidak ada yang ditampilkan, tambahkan nilai jalur default (atau tidak jika Anda mau)

$ LD_LIBRARY_PATH=/usr/local/lib

(3) Kami menambahkan jalur keinginan, mengekspornya, dan mencoba aplikasinya.

Perhatikan bahwa path harus berupa direktori tempat path.so.something is.Jadi jika path.so.something ada di /my_library/path.so.something seharusnya :

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/
$ export LD_LIBRARY_PATH
$ ./my_app

sumber :http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html


Berikut beberapa solusi yang dapat Anda coba:

ldconfig

Seperti yang ditunjukkan oleh AbiusX:Jika Anda baru saja menginstal pustaka, Anda mungkin hanya perlu menjalankan ldconfig.

sudo ldconfig

ldconfig membuat tautan dan cache yang diperlukan ke pustaka bersama terbaru yang ditemukan di direktori yang ditentukan di baris perintah, di file /etc/ld.so.conf, dan di direktori tepercaya(/lib dan /usr/lib).

Biasanya pengelola paket Anda akan menangani hal ini saat Anda menginstal pustaka baru, tetapi tidak selalu, dan tidak ada salahnya menjalankan ldconfig meskipun itu bukan masalah Anda.

Paket dev atau versi yang salah

Jika itu tidak berhasil, saya juga akan memeriksa saran Paul dan mencari versi "-dev" dari perpustakaan. Banyak perpustakaan dibagi menjadi paket dev dan non-dev. Anda dapat menggunakan perintah ini untuk mencarinya:

apt-cache search <libraryname>

Ini juga dapat membantu jika Anda menginstal versi perpustakaan yang salah. Beberapa pustaka diterbitkan dalam versi berbeda secara bersamaan, misalnya, Python.

Lokasi perpustakaan

Jika Anda yakin bahwa paket yang tepat telah terinstal, dan ldconfig tidak menemukannya, mungkin paket tersebut berada di direktori yang tidak standar. Secara default, ldconfig mencari di /lib , /usr/lib , dan direktori yang terdaftar di /etc/ld.so.conf dan $LD_LIBRARY_PATH . Jika pustaka Anda berada di tempat lain, Anda dapat menambahkan direktori pada barisnya sendiri di /etc/ld.so.conf , tambahkan jalur perpustakaan ke $LD_LIBRARY_PATH , atau pindahkan perpustakaan ke /usr/lib . Kemudian jalankan ldconfig .

Untuk mencari tahu di mana letak perpustakaan, coba ini:

sudo find / -iname *libraryname*.so*

(Ganti libraryname dengan nama perpustakaan Anda)

Jika Anda menggunakan $LD_LIBRARY_PATH route, Anda ingin memasukkannya ke dalam ~/.bashrc Anda file sehingga akan berjalan setiap kali Anda masuk:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Perbarui
Meskipun apa yang saya tulis di bawah ini benar sebagai jawaban umum tentang pustaka bersama, menurut saya penyebab paling sering dari pesan semacam ini adalah karena Anda telah menginstal sebuah paket, tetapi tidak menginstal versi "-dev" dari paket itu.

Yah, itu tidak bohong - tidak ada libpthread_rt.so.1 dalam daftar itu. Anda mungkin perlu mengonfigurasi ulang dan membuatnya kembali agar bergantung pada pustaka yang Anda miliki, atau memasang apa pun yang menyediakan libpthread_rt.so.1 .

Umumnya, angka setelah .so adalah nomor versi, dan Anda akan sering menemukan bahwa angka tersebut adalah symlink satu sama lain, jadi jika Anda memiliki libfoo.so versi 1.1, Anda akan memiliki file nyata libfoo.so.1.0, dan symlink foo.so dan foo.so.1 menunjuk ke libfoo.so.1.0. Dan jika Anda menginstal versi 1.1 tanpa menghapus yang lain, Anda akan memiliki libfoo.so.1.1, dan libfoo.so.1 dan libfoo.so sekarang akan mengarah ke yang baru, tetapi kode apa pun yang memerlukan versi persis tersebut dapat gunakan file libfoo.so.1.0. Kode yang hanya mengandalkan API versi 1, tetapi tidak peduli apakah itu 1.0 atau 1.1 akan menentukan libfoo.so.1. Seperti yang ditunjukkan orip dalam komentar, ini dijelaskan dengan baik di http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.

Dalam kasus Anda, Anda mungkin lolos dengan menyinkronkan libpthread_rt.so.1 ke libpthread_rt.so . Tidak ada jaminan bahwa itu tidak akan merusak kode Anda dan makan malam TV Anda.


Linux
  1. Cara Mengatasi Kesalahan "tidak dapat membuka file objek bersama" di Distribusi Linux berbasis Ubuntu

  2. Cara memperbaiki "kesalahan saat memuat perpustakaan bersama:libgtk-x11-2.0.so.0"

  3. Rpm:Kesalahan Saat Memuat Pustaka Bersama:Libz.so.1:Tidak Dapat Membuka File Objek Bersama:Tidak Ada File Tersebut

  1. cp:menghilangkan direktori – kesalahan saat menyalin direktori di Linux

  2. "kesalahan saat memuat perpustakaan bersama:libjli.so:tidak dapat membuka file objek bersama:Tidak ada file atau direktori seperti itu" kesalahan 'java -version' pada Startup

  3. libstdc++.so.5:tidak dapat membuka file objek bersama - tetapi pustaka diinstal dan mutakhir

  1. libaio.so.1:tidak dapat membuka file objek bersama

  2. libpulse.so.0:tidak dapat membuka file objek bersama:Tidak ada file atau direktori tersebut

  3. ImportError:libtk8.6.so:tidak dapat membuka file objek bersama:Tidak ada file atau direktori tersebut