cara memeriksa apakah perpustakaan diinstal?

167

Di linux, bagaimana cara memeriksa apakah perpustakaan diinstal atau tidak? (dari baris perintah tentu saja).

Dalam kasus spesifik saya sekarang, saya ingin memeriksa apakah libjpeg diinstal.

Hasen
sumber
Distribusi apa yang Anda gunakan?
radius

Jawaban:

211

Untuk melakukan ini dalam mode * distro-independent Anda dapat menggunakan ldconfig dengan grep, seperti ini:

ldconfig -p | grep libjpeg

Jika libjpeg tidak diinstal, tidak akan ada output. Jika diinstal, Anda akan mendapatkan garis untuk setiap versi yang tersedia.

Ganti libjpeg dengan perpustakaan mana pun yang Anda inginkan, dan Anda memiliki cara generik, bebas distro * untuk memeriksa ketersediaan perpustakaan.

Jika karena alasan tertentu jalur ke ldconfig tidak disetel, Anda dapat mencoba menjalankannya menggunakan jalur lengkapnya, biasanya /sbin/ldconfig.

** 99% dari waktu *

salah
sumber
2
Ini harus diterima sebagai jawabannya. Bagus!
1
Ini tidak mungkin untuk menggunakan ini untuk memeriksa versi dev (header) dari sebuah perpustakaan, kan?
andig
2
Bisakah Anda menentukan 99% kali ? bash: ldconfig: command not foundpada Debian x64 Jessie dengan xfce! Ini adalah rilis debian yang direkomendasikan di situs debian ...
Tomáš Zato
4
@ TomášZato: ldconfigtidak tersedia ( command not foundmuncul) jika Anda mencoba menjalankannya tanpa menjadi pengguna super.
Gauthier
2
/sbin/ldconfig -pbekerja untuk saya tanpa harus menjadi root.
Pedro Gimeno
34

Anda dapat memeriksa dengan manajer paket distribusi Anda (aptitude, yum, ...) tetapi karena Anda tidak memberikan distribusi Anda, saya tidak dapat memberi Anda perintah yang tepat.

Cara lain dapat dijalankan gcc -ljpeg, jika Anda mendapatkan 'ld: library tidak ditemukan untuk -ljpeg' itu berarti bahwa gcc belum menemukan perpustakaan (tetapi itu tidak berarti itu tidak diinstal), jika Anda mendapatkan sesuatu seperti 'Simbol tidak terdefinisi : "_main", dirujuk dari: ... 'itu berarti libjpeg telah ditemukan.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* ada beberapa cara lain untuk menemukan apakah lib di instal di sistem

Ada banyak cara lain untuk memeriksa itu, jika Anda memberi kami lebih banyak konteks (mengapa Anda perlu memeriksa apakah libjpeg diinstal) kami dapat memberikan solusi terbaik untuk kasus spesifik Anda.

radius
sumber
Bagaimana cara menemukannya menggunakan aptitude?
BBK
17

Saya menggunakan utilitas whereis .

Sampel:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la
penyelamat
sumber
11

Saya menggunakan ini:

gcc -lpng

Ketika lib diinstal, ia menghasilkan:

undefined reference to 'main'

Ketika lib tidak diinstal:

cannot find -lpng
AndreLDM
sumber
9

Untuk distribusi berbasis deb bisa Anda lakukan

dpkg -s packagename

Atau jika Anda hanya tahu nama filenya, gunakan

locate filename

Nama file biasanya libsomething.so [.version].

Kim
sumber
1
Nama file juga bisa seperti "libsomething.a" untuk versi statis.
radius
Saya menemukan dpkg -sketerbatasan dalam utilitas, karena menginginkan nama paket yang sebenarnya, yang mungkin berbeda secara halus atau signifikan dari perpustakaan itu sendiri. Saya menggunakandpkg -s|grep LIBRARY
Drew Stephens
2
@dinomite apt-file adalah teman Anda :)
radius
4

Pada sistem berbasis Redhat, seseorang dapat menggunakan pkg-config untuk memverifikasi apakah pustaka diinstal atau tidak. Banyak binari rpm yang benar-benar melakukan pemeriksaan yang sama sebelum melanjutkan dengan instalasi, jadi kita dapat mengandalkan kebenarannya.

pkg-config --cflags jpeg

pkg-config --libs jpeg

pkg-config --cflags "jpeg >= 1.0.0" # for version check
pkg-config  --modversion jpeg | awk -F. '{ printf "0x%02X%02X%02X\n",$1,$2,$3 }' #version check
Saasira
sumber
1

Anda juga dapat mencoba menggunakan dpkg untuk memeriksa apakah sudah diinstal.

dpkg --list | grep [some_key_words_of_your_lib]

Selain itu, pada CentOS, Anda dapat mencoba ini.

rpm -qa [lib_name]

Scott Yang
sumber
Catatan: Akan bekerja hanya untuk distro berbasis Debian
ALex_hha
@ALex_hha Ya, terima kasih, ini harus ditekankan. Pada sistem berbasis CentOS atau topi merah, gunakan pkg-configsaja.
Scott Yang