“ อันไหน” ที่เทียบเท่ากับห้องสมุดสาธารณะ


9

ฉันกำลังมองหายูทิลิตี้ที่จะทำงานในลักษณะเดียวกับwhichแต่เพื่อค้นหา shared library (* .so) ในไดเรกทอรีที่กำหนดใน $ LD_LIBRARY_PATH?

คำตอบ:


5

หากคุณมีแฟ้มที่ปฏิบัติการได้และคุณต้องการดูว่าแหล่งรวบรวมไลบรารีนั้นอยู่ที่ไหนให้เรียกใช้

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}'

5

หากห้องสมุดของคุณถูกแคชอย่างเหมาะสมคุณควรมีความสามารถในการค้นหาผ่าน:

ldconfig -p|grep "yourlibrary"

หากคุณค้นหาห้องสมุดที่มาพร้อมกับการแจกจ่ายของคุณคุณสามารถใช้วิธีการแจกจ่ายของการค้นหาไฟล์ภายในแพ็คเกจ

  • zypper wp "* / library.so" (SLES และ OpenSuSE)
  • yum ให้ "* / library.so" (RedHat และโคลนนิ่ง)

นี่จะเป็นเอาต์พุต rpms ที่ไม่ได้ติดตั้ง แต่เป็นส่วนหนึ่งของแหล่งการติดตั้งที่ใช้งานอยู่ของคุณ


3

หากคุณกำลังมองหาโปรแกรมที่จะทำงานเช่น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 ]

1
ขอบคุณสำหรับสคริปต์ แต่ฉันสงสัยจริงๆว่ามียูทิลิตี้ "มาตรฐาน" สำหรับสิ่งนี้หรือไม่
rahmu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.