ใน linux ฉันจะตรวจสอบได้อย่างไรว่ามีการติดตั้งไลบรารี่หรือไม่? (จากบรรทัดคำสั่งของหลักสูตร)
ในกรณีเฉพาะตอนนี้ฉันต้องการตรวจสอบว่าติดตั้ง libjpeg หรือไม่
ใน linux ฉันจะตรวจสอบได้อย่างไรว่ามีการติดตั้งไลบรารี่หรือไม่? (จากบรรทัดคำสั่งของหลักสูตร)
ในกรณีเฉพาะตอนนี้ฉันต้องการตรวจสอบว่าติดตั้ง libjpeg หรือไม่
คำตอบ:
ในการทำสิ่งนี้ในรูปแบบที่เป็นอิสระจาก distro คุณสามารถใช้ ldconfig กับ grep ดังนี้:
ldconfig -p | grep libjpeg
หาก libjpeg ไม่ได้ติดตั้งจะไม่มีเอาต์พุต หากติดตั้งแล้วคุณจะได้รับบรรทัดสำหรับแต่ละเวอร์ชัน
แทนที่ libjpeg ด้วยไลบรารี่ที่คุณต้องการและคุณมีวิธีการตรวจสอบความพร้อมใช้งานของไลบรารี * ทั่วไป
หากมีเหตุผลบางเส้นทางไป ldconfig /sbin/ldconfig
ไม่ได้ตั้งคุณสามารถพยายามที่จะเรียกใช้โดยใช้เส้นทางที่เต็มไปด้วยมักจะ
** 99% ของจำนวนครั้ง *
bash: ldconfig: command not found
บน Debian x64 Jessie ด้วย xfce! นี่คือการเปิดตัวเดเบียนที่แนะนำบนเว็บไซต์เดเบียน ...
ldconfig
ไม่สามารถใช้งานได้ ( command not found
แสดงขึ้นมา) หากคุณพยายามเรียกใช้โดยไม่ต้องใช้ superuser
/sbin/ldconfig -p
ทำงานให้ฉันได้โดยไม่จำเป็นต้องรูท
คุณสามารถตรวจสอบกับผู้จัดการบรรจุภัณฑ์ของการกระจายของคุณ (ความถนัด, ยำ, ... ) แต่เนื่องจากคุณไม่ได้ให้การกระจายของฉันฉันไม่สามารถให้คำสั่งที่ถูกต้องแก่คุณได้
สามารถเรียกใช้อีกวิธีได้gcc -ljpeg
หากคุณได้รับ 'ld: library ไม่พบสำหรับ -ljpeg' หมายความว่า gcc ไม่พบไลบรารี (แต่ไม่ได้หมายความว่าไม่ได้ติดตั้ง) หากคุณได้รับสัญลักษณ์ 'Undefined' : "_main" อ้างอิงจาก: ... 'นั่นหมายความว่าพบ libjpeg
locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg*
เป็นวิธีอื่นเพื่อค้นหาว่า lib ในการติดตั้งในระบบ
มีวิธีอื่น ๆ อีกมากมายในการตรวจสอบว่าถ้าคุณให้บริบทเพิ่มเติมกับเรา (ทำไมคุณต้องตรวจสอบว่าติดตั้ง libjpeg) เราสามารถให้ทางออกที่ดีที่สุดสำหรับกรณีของคุณโดยเฉพาะ
ฉันใช้ยูทิลิตี้whereis
ตัวอย่าง:
l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la
ฉันใช้สิ่งนี้:
gcc -lpng
เมื่อติดตั้ง lib แล้วจะได้รับ:
undefined reference to 'main'
เมื่อไม่ได้ติดตั้งlib :
cannot find -lpng
สำหรับการกระจายแบบอิงเดบิตคุณสามารถทำได้
dpkg -s packagename
หรือถ้าคุณรู้จักชื่อไฟล์เท่านั้นให้ใช้
locate filename
ชื่อไฟล์มักจะเป็น libsomething.so [.version]
dpkg -s
มีข้อ จำกัด ในยูทิลิตี้เนื่องจากต้องการชื่อแพคเกจจริงซึ่งอาจแตกต่างอย่างละเอียดหรือมีนัยสำคัญจากไลบรารีเอง ฉันใช้dpkg -s|grep LIBRARY
บน 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
สิ่งนี้ทำโดยเครื่องมือการกำหนดค่าบน linux ตลอดเวลา
ดูที่นี้สอนเกี่ยวกับ autoconf และ KDevelop
เทคนิคอื่น ๆ จะใช้คำสั่งเช่นและldconfig
dpkg
นอกจากนี้คุณยังสามารถลองใช้ dpkg เพื่อตรวจสอบว่ามีการติดตั้งหรือไม่
dpkg --list | grep [some_key_words_of_your_lib]
นอกจากนี้บน CentOS คุณสามารถลองสิ่งนี้
rpm -qa [lib_name]
pkg-config
แทน