ฉันกำลังมองหายูทิลิตี้ที่จะทำงานในลักษณะเดียวกับwhich
แต่เพื่อค้นหา shared library (* .so) ในไดเรกทอรีที่กำหนดใน $ LD_LIBRARY_PATH?
ฉันกำลังมองหายูทิลิตี้ที่จะทำงานในลักษณะเดียวกับwhich
แต่เพื่อค้นหา shared library (* .so) ในไดเรกทอรีที่กำหนดใน $ LD_LIBRARY_PATH?
คำตอบ:
หากคุณมีแฟ้มที่ปฏิบัติการได้และคุณต้องการดูว่าแหล่งรวบรวมไลบรารีนั้นอยู่ที่ไหนให้เรียกใช้
ldd /path/to/executable
สิ่งนี้จะอธิบายถึงไลบรารีบนพา ธ การค้นหาเริ่มต้นรวมถึงไลบรารีในrpathของไฟล์เอ็กซีคิวต์นี้ถ้ามี
บน Linux พา ธ ไปยังไลบรารีระบบถูกแคชเพื่อประสิทธิภาพ /sbin/ldconfig -p
แสดงเนื้อหาของแคช (มันถูกเก็บไว้ใน/etc/ld.so.cache
) นี่คือสคริปต์ที่แสดงตำแหน่งของห้องสมุด:
#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
set -f
IFS=:
for d in $LD_LIBRARY_PATH; do
if [ -e "$d/$1" ]; then echo "$1"; fi
done
fi
/sbin/ldconfig -p |
awk -v needle="$1" '$1 == needle {sub(/.* => /, ""); print}'
หากห้องสมุดของคุณถูกแคชอย่างเหมาะสมคุณควรมีความสามารถในการค้นหาผ่าน:
ldconfig -p|grep "yourlibrary"
หากคุณค้นหาห้องสมุดที่มาพร้อมกับการแจกจ่ายของคุณคุณสามารถใช้วิธีการแจกจ่ายของการค้นหาไฟล์ภายในแพ็คเกจ
นี่จะเป็นเอาต์พุต rpms ที่ไม่ได้ติดตั้ง แต่เป็นส่วนหนึ่งของแหล่งการติดตั้งที่ใช้งานอยู่ของคุณ
หากคุณกำลังมองหาโปรแกรมที่จะทำงานเช่นgcc
's -lLIBNAME
ธงซึ่งมีลักษณะสำหรับไฟล์ที่เรียกว่าlibLIBNAME.so
แล้วคุณอาจจะใช้สคริปต์เล็ก ๆ น้อย ๆ ที่ไม่อะไรเช่นนี้
#!/bin/sh
ldpath="${LD_LIBRARY_PATH:-$(</etc/ld.so.conf)}"
notfound=1
for libdir in ${ldpath//:/ }; do
(test -f "$libdir/lib${1}.so" && echo "$_") && notfound=0
done
[ "$notfound" -eq 0 ]