Program adalah bagian dari test suite Xenomai, dikompilasi silang dari Linux PC ke Linux + toolchain Xenomai ARM.
# echo $LD_LIBRARY_PATH
/lib
# ls /lib
ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so
ld-linux.so.2 libdl.so.2 libpthread.so.0
libc-2.3.3.so libgcc_s.so libpthread_rt.so
libc.so.6 libgcc_s.so.1 libstdc++.so.6
libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9
libcrypt.so.1 libm.so.6
# ./clocktest
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory
Sunting: OK Saya tidak melihat .1 pada akhirnya adalah bagian dari nama file. Apa artinya itu?
linux
shared-libraries
file-not-found
xenomai
zaratustra
sumber
sumber
Jawaban:
Pembaruan
Sementara apa yang saya tulis di bawah ini benar sebagai jawaban umum tentang pustaka bersama, saya pikir penyebab paling sering dari jenis pesan ini adalah karena Anda telah menginstal 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 mengkonfigurasi ulang dan membangun kembali sehingga tergantung pada perpustakaan yang Anda miliki, atau menginstal apa pun yang disediakanlibpthread_rt.so.1
.Secara umum, angka setelah .so adalah nomor versi, dan Anda akan sering menemukan bahwa mereka adalah symlink satu sama lain, jadi jika Anda memiliki versi 1.1 dari libfoo.so, Anda akan memiliki file nyata libfoo.so.1.0, dan symlinks 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 menunjuk ke yang baru, tetapi kode apa pun yang membutuhkan versi yang tepat 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 oleh orip di komentar, ini dijelaskan dengan baik di http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html .
Dalam kasus Anda, Anda mungkin lolos dari symlinking
libpthread_rt.so.1
tolibpthread_rt.so
. Tidak ada jaminan bahwa itu tidak akan merusak kode Anda dan makan malam TV Anda.sumber
Perpustakaan Anda adalah perpustakaan yang dinamis. Anda perlu memberi tahu sistem operasi di mana ia dapat menemukannya saat runtime.
Untuk melakukannya, kita perlu melakukan langkah-langkah mudah itu:
(1) Temukan tempat perpustakaan ditempatkan jika Anda tidak mengetahuinya.
(2) Periksa keberadaan variabel lingkungan path perpustakaan dinamis (
LD_LIBRARY_PATH
)jika tidak ada yang ditampilkan, tambahkan nilai jalur default (atau tidak jika Anda mau)
(3) Kami menambahkan jalur keinginan, mengekspornya dan mencoba aplikasi.
Perhatikan bahwa path harus berupa direktori tempat
path.so.something
. Jadi jikapath.so.something
ada di/my_library/path.so.something
dalamnya harus:sumber: http://www.gnu.org/software/gsl/manual/html_node/Shared-Libraries.html
sumber
find
sendiri:find / -name the_name_of_the_file.so
LD_LIBRARY_PATH
harus menunjuk ke direktori yang berisipath.so.something
, bukan kepath.so.something
dirinya sendiri.Berikut adalah beberapa solusi yang dapat Anda coba:
ldconfig
Seperti yang ditunjukkan AbiusX: Jika Anda baru saja menginstal perpustakaan, Anda mungkin hanya perlu menjalankan ldconfig .
Biasanya manajer paket Anda akan menangani hal ini ketika Anda menginstal perpustakaan baru, tetapi tidak selalu, dan tidak ada salahnya untuk menjalankan ldconfig bahkan jika itu bukan masalah Anda.
Paket pengembangan atau versi yang salah
Jika itu tidak berhasil, saya juga akan memeriksa saran Paul dan mencari versi "-dev" dari perpustakaan. Banyak perpustakaan dipecah menjadi paket dev dan non-dev. Anda dapat menggunakan perintah ini untuk mencarinya:
Ini juga dapat membantu jika Anda hanya menginstal versi perpustakaan yang salah. Beberapa perpustakaan diterbitkan dalam versi yang berbeda secara bersamaan, misalnya, Python.
Lokasi perpustakaan
Jika Anda yakin paket yang tepat sudah diinstal, dan ldconfig tidak menemukannya, mungkin saja berada di direktori yang tidak standar. Secara default, ldconfig mencari di
/lib
,/usr/lib
, dan direktori yang tercantum dalam/etc/ld.so.conf
dan$LD_LIBRARY_PATH
. Jika pustaka Anda berada di tempat lain, Anda bisa menambahkan direktori pada barisnya sendiri/etc/ld.so.conf
, menambahkan jalur pustaka$LD_LIBRARY_PATH
, atau memindahkan pustaka/usr/lib
. Kemudian jalankanldconfig
.Untuk mencari tahu di mana perpustakaan itu, coba ini:
(Ganti
libraryname
dengan nama perpustakaan Anda)Jika Anda pergi
$LD_LIBRARY_PATH
rute, Anda ingin memasukkannya ke~/.bashrc
file Anda sehingga akan berjalan setiap kali Anda login:sumber
.conf
file saya sendiri dengan lib path non-standar yang saya perlukan/etc/ld.so.conf.d
(ditunjukkan oleh/etc/ld.so.conf
) melakukan trik.Saya memiliki kesalahan yang sama, saya bisa mengatasinya dengan memberi,
Semoga ini membantu.
sumber
Anda perlu memastikan bahwa Anda menentukan jalur pustaka selama menautkan saat Anda mengompilasi file .c Anda:
Bagian -Wl, -R memberitahu biner yang dihasilkan untuk juga mencari perpustakaan di / usr / local / lib saat runtime sebelum mencoba menggunakan yang ada di / usr / lib /
Semoga ini bisa membantu Anda.
sumber
-Wl,-rpath DIR
.Coba tambahkan
LD_LIBRARY_PATH
, yang menunjukkan jalur pencarian, ke~/.bashrc
file AndaBerhasil!
sumber
Halaman referensi linux.org menjelaskan mekanisme, tetapi tidak menjelaskan motivasi di baliknya :-(
Untuk itu, lihat Sun Linker dan Libraries Guide
Selain itu, perhatikan bahwa "versi eksternal" sebagian besar sudah usang di Linux, karena versi simbol (ekstensi GNU) memungkinkan Anda untuk memiliki beberapa versi yang tidak kompatibel dengan fungsi yang sama untuk hadir di perpustakaan tunggal. Ekstensi ini memungkinkan glibc untuk memiliki versi eksternal yang sama:
libc.so.6
selama 10 tahun terakhir.sumber
tambahkan baris ini di akhir
sumber
Saya memiliki kesalahan yang sama dan tidak diperbaiki dengan memberikan LD_LIBRARY_PATH di ~ / .bashrc. Apa yang memecahkan masalah saya adalah dengan menambahkan file .conf dan memuatnya. Pergi ke terminal dan su.
Tambahkan jalur pustaka Anda di file ini dan simpan. (Mis .: / usr / local / lib). Anda harus menjalankan perintah berikut untuk mengaktifkan jalur:
Verifikasi Jalur Perpustakaan Baru Anda:
Jika ini menunjukkan file perpustakaan Anda, maka Anda bisa melakukannya.
sumber
Solusi lain yang mungkin tergantung pada situasi Anda.
Jika Anda tahu bahwa libpthread_rt.so.1 sama dengan libpthread_rt.so maka Anda dapat membuat symlink dengan:
Maka
ls -l /lib
sekarang harus menunjukkan symlink dan apa yang ditunjukkannya.sumber
Saya mengalami kesalahan ini ketika menjalankan aplikasi saya dengan Eclipse CDT di Linux x86.
Untuk memperbaikinya:
Atur jalurnya
sumber
Yang harus saya lakukan adalah menjalankan:
Saya berada di folder yang terletak di
/usr/lib/x86_64-linux-gnu
dan itu bekerja dengan sempurna.sumber
Jika Anda menjalankan aplikasi di Microsoft Windows, jalur ke perpustakaan dinamis (.dll) harus ditentukan dalam variabel lingkungan PATH.
Jika Anda menjalankan aplikasi Anda di UNIX, jalur ke perpustakaan dinamis Anda (.so) perlu ditentukan dalam variabel lingkungan LD_LIBRARY_PATH.
sumber
coba pasang sudo lib32z1
sumber
Kesalahan terjadi karena sistem tidak dapat merujuk ke file perpustakaan yang disebutkan. Ambil langkah-langkah berikut:
locate libpthread_rt.so.1
akan menampilkan lintasan semua file dengan nama itu. Anggaplah jalan itu/home/user/loc
.cd home/USERNAME
. Ganti USERNAME dengan nama pengguna aktif saat ini yang Anda inginkan untuk menjalankan file.vi .bash_profile
dan di akhirLD_LIBRARY_PATH
parameter, tepat sebelum.
, tambahkan baris/lib://home/usr/loc:.
. Simpan file.sumber
Saya mendapat kesalahan ini dan saya pikir itu alasan Anda sama
Coba ini. Perbaiki izin pada file:
“Sudo su” untuk mendapatkan izin pada sistem file Anda.
sumber
Saya mendapat kesalahan ini dan saya pikir itu alasan Anda sama
Coba ini. Perbaiki izin pada file:
sumber
masalah serupa ditemukan di sini: https://bugzilla.redhat.com/show_bug.cgi?id=1456202 Saya sudah mencoba solusi yang disebutkan dan itu benar-benar berfungsi.
Solusi dalam pertanyaan sebelumnya mungkin berhasil. Tapi saya pikir ini adalah cara mudah untuk memperbaikinya. Coba instal ulang paket
libwbclient
di fedora:sumber
Saya menggunakan Ubuntu 18.04
Menginstal paket "-dev" yang sesuai berhasil untuk saya,
Saya mendapatkan kesalahan di bawah ini sampai saya menginstal paket di atas,
sumber