จะตรวจสอบว่ามีการติดตั้งห้องสมุดได้อย่างไร?


167

ใน linux ฉันจะตรวจสอบได้อย่างไรว่ามีการติดตั้งไลบรารี่หรือไม่? (จากบรรทัดคำสั่งของหลักสูตร)

ในกรณีเฉพาะตอนนี้ฉันต้องการตรวจสอบว่าติดตั้ง libjpeg หรือไม่


คุณใช้การกระจายแบบใด
รัศมี

คำตอบ:


210

ในการทำสิ่งนี้ในรูปแบบที่เป็นอิสระจาก distro คุณสามารถใช้ ldconfig กับ grep ดังนี้:

ldconfig -p | grep libjpeg

หาก libjpeg ไม่ได้ติดตั้งจะไม่มีเอาต์พุต หากติดตั้งแล้วคุณจะได้รับบรรทัดสำหรับแต่ละเวอร์ชัน

แทนที่ libjpeg ด้วยไลบรารี่ที่คุณต้องการและคุณมีวิธีการตรวจสอบความพร้อมใช้งานของไลบรารี * ทั่วไป

หากมีเหตุผลบางเส้นทางไป ldconfig /sbin/ldconfigไม่ได้ตั้งคุณสามารถพยายามที่จะเรียกใช้โดยใช้เส้นทางที่เต็มไปด้วยมักจะ

** 99% ของจำนวนครั้ง *


2
ควรได้รับการยอมรับว่าเป็นคำตอบ ที่ดี!

1
ไม่สามารถใช้สิ่งนี้เพื่อตรวจสอบเวอร์ชัน dev (ส่วนหัว) ของไลบรารีใช่ไหม
andig

2
คุณสามารถระบุ99% ครั้งได้หรือไม่ bash: ldconfig: command not foundบน Debian x64 Jessie ด้วย xfce! นี่คือการเปิดตัวเดเบียนที่แนะนำบนเว็บไซต์เดเบียน ...
Tomáš Zato

4
@ TomášZato: ldconfigไม่สามารถใช้งานได้ ( command not foundแสดงขึ้นมา) หากคุณพยายามเรียกใช้โดยไม่ต้องใช้ superuser
Gauthier

2
/sbin/ldconfig -pทำงานให้ฉันได้โดยไม่จำเป็นต้องรูท
Pedro Gimeno

34

คุณสามารถตรวจสอบกับผู้จัดการบรรจุภัณฑ์ของการกระจายของคุณ (ความถนัด, ยำ, ... ) แต่เนื่องจากคุณไม่ได้ให้การกระจายของฉันฉันไม่สามารถให้คำสั่งที่ถูกต้องแก่คุณได้

สามารถเรียกใช้อีกวิธีได้gcc -ljpegหากคุณได้รับ 'ld: library ไม่พบสำหรับ -ljpeg' หมายความว่า gcc ไม่พบไลบรารี (แต่ไม่ได้หมายความว่าไม่ได้ติดตั้ง) หากคุณได้รับสัญลักษณ์ 'Undefined' : "_main" อ้างอิงจาก: ... 'นั่นหมายความว่าพบ libjpeg

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* เป็นวิธีอื่นเพื่อค้นหาว่า lib ในการติดตั้งในระบบ

มีวิธีอื่น ๆ อีกมากมายในการตรวจสอบว่าถ้าคุณให้บริบทเพิ่มเติมกับเรา (ทำไมคุณต้องตรวจสอบว่าติดตั้ง libjpeg) เราสามารถให้ทางออกที่ดีที่สุดสำหรับกรณีของคุณโดยเฉพาะ


จะค้นหาโดยใช้ความสามารถได้อย่างไร
BBK

17

ฉันใช้ยูทิลิตี้whereis

ตัวอย่าง:

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

11

ฉันใช้สิ่งนี้:

gcc -lpng

เมื่อติดตั้ง lib แล้วจะได้รับ:

undefined reference to 'main'

เมื่อไม่ได้ติดตั้งlib :

cannot find -lpng

9

สำหรับการกระจายแบบอิงเดบิตคุณสามารถทำได้

dpkg -s packagename

หรือถ้าคุณรู้จักชื่อไฟล์เท่านั้นให้ใช้

locate filename

ชื่อไฟล์มักจะเป็น libsomething.so [.version]


1
ชื่อไฟล์อาจเป็น "libsomething.a" สำหรับรุ่นคงที่ได้
รัศมี

ฉันพบว่าdpkg -sมีข้อ จำกัด ในยูทิลิตี้เนื่องจากต้องการชื่อแพคเกจจริงซึ่งอาจแตกต่างอย่างละเอียดหรือมีนัยสำคัญจากไลบรารีเอง ฉันใช้dpkg -s|grep LIBRARY
Drew Stephens

2
@dinomite apt-file คือเพื่อนของคุณ :)
รัศมี

4

บน Redhat based systems เราสามารถใช้ pkg-config เพื่อตรวจสอบว่ามีการติดตั้งไลบรารี่หรือไม่ ไบนารี rpm จำนวนมากทำการตรวจสอบเหมือนกันจริง ๆ ก่อนที่จะทำการติดตั้งต่อไปดังนั้นเราจึงสามารถเชื่อถือได้อย่างแท้จริง

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


1

นอกจากนี้คุณยังสามารถลองใช้ dpkg เพื่อตรวจสอบว่ามีการติดตั้งหรือไม่

dpkg --list | grep [some_key_words_of_your_lib]

นอกจากนี้บน CentOS คุณสามารถลองสิ่งนี้

rpm -qa [lib_name]


หมายเหตุ: จะใช้ได้เฉพาะกับ
Distros ที่

@ALex_hha ใช่ขอบคุณนี่ควรจะเน้น บน CentOS ระบบหรือสีแดงหมวกตามใช้pkg-configแทน
Scott Yang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.