זוהי הפקודה dpkg-shlibdeps שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
dpkg-shlibdeps - יצירת תלות משנה של ספרייה משותפת
תַקצִיר
dpkg-shlibdeps [אוֹפְּצִיָה...] [-e]הפעלה [אוֹפְּצִיָה...]
תיאור
dpkg-shlibdeps מחשבת תלות בספרייה משותפת עבור קובצי הפעלה הנקובים בשמה
טיעונים. התלות מתווספות לקובץ משתני ההחלפה debian/substvars
בתור שמות משתנים שליבס:שדה תלות איפה שדה תלות הוא תחום תלות
שֵׁם. כל משתנים אחרים שמתחילים ב שליבס: מוסרים מהקובץ.
dpkg-shlibdeps יש שני מקורות מידע אפשריים ליצירת מידע תלות.
או סמלים קבצים או שליבס קבצים. עבור כל בינארי זה dpkg-shlibdeps מנתח, זה
מגלה את רשימת הספריות שהוא מקושר אליהן. ואז, עבור כל ספרייה, זה נראה
למעלה או את סמלים קובץ, או ה שליבס קובץ (אם הקודם אינו קיים או אם
debian/shlibs.local מכיל את התלות הרלוונטית). שני הקבצים אמורים להיות
מסופק על ידי חבילת הספרייה ולכן אמור להיות זמין כ
/var/lib/dpkg/info/חבילה.סמלים or /var/lib/dpkg/info/חבילה.שליבס. שם החבילה
מזוהה בשני שלבים: מצא את קובץ הספרייה במערכת (נראה באותו אופן
ספריות כי ld.so תשתמש), ואז תשתמש dpkg -S קובץ ספרייה כדי לחפש את החבילה
לספק את הספרייה.
סמלים קבצים
קובצי סמלים מכילים מידע תלות עדין יותר על ידי מתן המינימום
תלות עבור כל סמל שהספרייה מייצאת. התסריט מנסה למצוא סמלים
קובץ המשויך לחבילת ספרייה במקומות הבאים (נעשה שימוש בהתאמה ראשונה):
debian/*/DEBIAN/symbols
מידע ספרייה משותף שנוצר על ידי תהליך הבנייה הנוכחי שהפעיל גם הוא
dpkg-shlibdeps. הם נוצרים על ידי dpkg-gensymbols(1). הם משמשים רק אם
הספרייה נמצאת בעץ הבנייה של החבילה. קובץ הסמלים בעץ הבנייה הזה
מקבל עדיפות על פני קבצי סימנים מחבילות בינאריות אחרות.
/etc/dpkg/symbols/חבילה.סמלים.קשת
/etc/dpkg/symbols/חבילה.סמלים
עקיפת מידע תלות של ספרייה משותפת לכל מערכת. קשת האם ה
ארכיטקטורה של המערכת הנוכחית (שהושג על ידי ארכיטקטורת dpkg -qDEB_HOST_ARCH).
פלט מ"dpkg-שאילתה --שביל-שליטה חבילה סמלים"
מידע על תלות ספרייה משותפת שסופק על ידי חבילה. אלא אם כן נדחק על ידי
--אדמינדיר, קבצים אלה ממוקמים ב-/var/lib/dpkg.
תוך כדי סריקת הסמלים המשמשים את כל הקבצים הבינאריים, dpkg-shlibdeps זוכר את (הכי גדול)
גרסה מינימלית הדרושה לכל ספריה. בסוף התהליך הוא מסוגל לכתוב
להוציא את התלות המינימלית לכל ספרייה בשימוש (בתנאי שהמידע של ה
סמלים הקבצים מדויקים).
כאמצעי הגנה, קובץ סמלים יכול לספק א בנייה-תלוי-חבילה meta-
שדה מידע ו dpkg-shlibdeps יחלץ את הגרסה המינימלית הנדרשת על ידי
החבילה המתאימה ב- בנייה תלויה שדה והשתמש בגרסה זו אם היא גבוהה מ-
הגרסה המינימלית המחושבת על ידי סריקת סמלים.
שליבס קבצים
קבצי Shlibs מקשרים ספריה ישירות לתלות (מבלי להסתכל על
סמלים). לכן הוא לרוב חזק מהנדרש, אבל מאוד בטוח וקל לטיפול.
התלות של ספרייה נבדקת בכמה מקומות. הקובץ הראשון המספק
נעשה שימוש במידע עבור ספריית העניין:
debian/shlibs.local
חבילה מקומית עוקפת מידע תלות של ספרייה משותפת.
/etc/dpkg/shlibs.override
עקיפת מידע תלות של ספרייה משותפת לכל מערכת.
debian/*/DEBIAN/shlibs
מידע ספרייה משותף שנוצר על ידי תהליך הבנייה הנוכחי שהפעיל גם הוא
dpkg-shlibdeps. הם משמשים רק אם הספרייה נמצאת במבנה של חבילה
עֵץ. קובץ shlibs בעץ ה-build הזה מקבל עדיפות על פני קבצי shlibs
חבילות בינאריות אחרות.
פלט מ"dpkg-שאילתה --שביל-שליטה חבילה שליבס"
מידע על תלות ספרייה משותפת שסופק על ידי חבילה. אלא אם כן נדחק על ידי
--אדמינדיר, קבצים אלה ממוקמים ב-/var/lib/dpkg.
/etc/dpkg/shlibs.default
מידע על תלות ספרייה משותפת ברירת מחדל לכל מערכת.
לאחר מכן נעשה שימוש ישיר בתלות שחולצו (למעט אם הם מסוננים בגלל
הם זוהו ככפולים, או כחלשים יותר מתלות אחרת).
אפשרויות
dpkg-shlibdeps מפרש ארגומנטים שאינם אופציונליים כשמות ניתנים להפעלה, ממש כאילו היו
מסופק כ -eהפעלה.
-eהפעלה
כלול תלות המתאימות לספריות המשותפות הנדרשות על ידי הפעלה.
ניתן להשתמש באפשרות זו מספר פעמים.
-lבספרייה
להוסיף בספרייה לרשימת הספריות לחיפוש ספריות משותפות פרטיות
(מאז dpkg 1.17.0). ניתן להשתמש באפשרות זו מספר פעמים.
הערה: השתמש באפשרות זו במקום הגדרה LD_LIBRARY_PATH, כסביבה ההיא
המשתנה משמש לשליטה במקשר של זמן הריצה וניצול לרעה שלו כדי להגדיר את המשותף
נתיבי ספרייה בזמן הבנייה יכולים להיות בעייתיים בעת קומפילציה צולבת, למשל.
-dשדה תלות
הוסף תלות שיתווספו לשדה התלות של קובץ הבקרה שדה תלות.
(התלות עבור שדה זה ממוקמות במשתנה שליבס:תלות-
שדה.)
השמיים -dשדה תלות אפשרות נכנסת לתוקף עבור כל קובצי ההפעלה לאחר האפשרות,
עד הבא -dשדה תלות. ברירת המחדל שדה תלות is תלוי.
אם אותו ערך תלות (או קבוצת חלופות) מופיע ביותר מאחת מהן
שמות שדות התלות המוכרים תלוי מראש, תלוי, ממלי, משפר or
מציע אז dpkg-shlibdeps יסיר אוטומטית את התלות מכולם
שדות מלבד זה שמייצג את התלות החשובות ביותר.
-pתחילית varname
התחל משתני החלפה עם תחילית varname: במקום שליבס:. כך גם
כל משתני החלפה קיימים שמתחילים ב תחילית varname: (ולא
שליבס:) מוסרים מקובץ משתני ההחלפה.
-O[שם הקובץ]
הדפס הגדרות משתני החלפה לפלט סטנדרטי (או שם הקובץ אם צוין,
מאז dpkg 1.17.2), במקום להתווסף לקובץ משתני ההחלפה
(debian/substvars כברירת מחדל).
-tסוג העדיפו מידע תלות של ספרייה משותפת מתויג עבור סוג החבילה הנתון. אם
אין מידע מתויג זמין, נופל חזרה למידע לא מתויג. ברירת המחדל
סוג החבילה הוא deb. מידע תלות של ספרייה משותפת מתויג עבור נתון
הקלד על ידי הקדמת שם הסוג, נקודתיים ורווח לבן.
-Llocal-shlibs-file
קרא עקיפת מידע תלות של ספרייה משותפת מ local-shlibs-file
במקום debian/shlibs.local.
-Tקובץ substvars
כתוב משתני החלפה ב קובץ substvars; ברירת המחדל היא debian/substvars.
-v אפשר מצב מילולי (מאז dpkg 1.14.8). הודעות רבות מוצגות ל
תסביר מה dpkg-shlibdeps עושה.
-xחבילה
אל תכלול את החבילה מהתלות שנוצרה (מאז dpkg 1.14.8). זה
שימושי כדי למנוע תלות עצמית עבור חבילות המספקות ELF בינאריים
(קובצי הפעלה או תוספי ספרייה) באמצעות ספרייה הכלולה באותה חבילה.
ניתן להשתמש באפשרות זו מספר פעמים כדי לא לכלול מספר חבילות.
-Spackage-build-dir
התבונן package-build-dir תחילה כאשר מנסים למצוא ספריה (מאז dpkg
1.14.15). זה שימושי כאשר חבילת המקור בונה טעמים מרובים של
אותה ספריה ואתה רוצה להבטיח שתקבל את התלות מבינארי נתון
חֲבִילָה. אתה יכול להשתמש באפשרות זו מספר פעמים: ספריות ינוסו ב-
אותו סדר לפני ספריות של חבילות בינאריות אחרות.
--התעלם ממידע חסר
אל תיכשל אם לא ניתן למצוא מידע תלות עבור ספרייה משותפת (מאז
dpkg 1.14.8). השימוש באפשרות זו אינו מעודד, כל הספריות צריכות לספק
מידע תלות (או עם קבצי shlibs, או עם קבצי סימנים) גם אם
הם עדיין לא בשימוש על ידי חבילות אחרות.
--אזהרות=ערך
ערך הוא שדה סיביות המגדיר את קבוצת האזהרות שניתן לפלוט על ידי
dpkg-shlibdeps (מאז dpkg 1.14.17). סיביות 0 (ערך=1) מאפשרת את האזהרה "סמל
SYM בשימוש על ידי בינרי לא נמצא באף אחת מהספריות", סיביות 1 (ערך=2) מאפשרת את
אזהרה "חבילה עלולה למנוע תלות חסרת תועלת" והביט 2 (ערך=4) מאפשר את
אזהרה"בינרי לא צריך להיות מקושר נגד ספריה". ברירת המחדל ערך הוא 3: ה
שתי האזהרות הראשונות פעילות כברירת מחדל, האחרונה לא. מַעֲרֶכֶת ערך עד 7 אם
אתה רוצה שכל האזהרות יהיו פעילות.
--admindir=dir
שנה את המיקום של dpkg מסד נתונים (מאז dpkg 1.14.0). מיקום ברירת המחדל
is /var/lib/dpkg.
-?, - עזרה
הצג את הודעת השימוש וצא.
--גִרְסָה
הצג את הגרסה וצא.
דיאגנוסטיקה
אזהרות
השאלה היא איך? dpkg-shlibdeps מנתח את קבוצת הסמלים בשימוש על ידי כל בינארי מהנוצר
החבילה, היא מסוגלת לפלוט אזהרות במספר מקרים. הם מודיעים לך על דברים שיכולים
להיות משופר בחבילה. ברוב המקרים, שיפורים אלה נוגעים למקורות במעלה הזרם
בצורה ישירה. לפי סדר חשיבות יורד, להלן האזהרות השונות שאתה יכול
פְּגִישָׁה:
סמל SYM מְשׁוּמָשׁ by בינרי מצא in אף לא אחד of מה היא ספריות.
הסמל המצוין לא נמצא בספריות המקושרות לבינארי.
השמיים בינרי היא ככל הנראה ספריה ויש לקשר אותה עם ספרייה נוספת
הספרייה במהלך תהליך הבנייה (אפשרות -lספריה של המקשר).
בינרי מכיל an בלתי פתיר הפניה ל סמל SYM: זה כנראה a חיבור
הסמל המצוין לא נמצא בספריות המקושרות לבינארי.
השמיים בינרי הוא ככל הנראה תוסף והסמל מסופק כנראה על ידי
תוכנית שטוענת את התוסף הזה. בתיאוריה לפלאגין אין SONAME מלבד זה
לבינארי יש אחד וככזה לא ניתן היה לזהות אותו בבירור ככזה.
עם זאת העובדה שהקובץ הבינארי מאוחסן בספרייה לא ציבורית היא חזקה
סימן שזו לא ספרייה משותפת רגילה. אם הבינארי הוא באמת א
תוסף, ואז התעלם מהאזהרה זו. אבל תמיד קיימת האפשרות שזה א
ספרייה אמיתית ושתוכניות המקשרות אליה משתמשות ב-RPATH כך שהדינמיקה
מטעין מוצא אותו. במקרה כזה, הספרייה שבורה ויש לתקן אותה.
חבילה יכול לְהִמָנַע a חסר תועלת התלות if בינרי היה לֹא צמוד נגד ספריה (זה שימושים
אף לא אחד of מה היא ספריות סמלים)
אף אחד בינאריות שקשורים אליהם ספריה השתמש בכל אחד מהסמלים שסופקו
על ידי הספרייה. על ידי תיקון כל הקבצים הבינאריים, היית נמנע מהתלות
המשויך לספרייה זו (אלא אם אותה תלות נוצרת גם על ידי אחר
ספרייה שבאמת משתמשים בה).
חבילה יכול לְהִמָנַע a חסר תועלת התלות if בינאריות היו לֹא צמוד נגד ספריה (הֵם
שימושים אף לא אחד of מה היא ספריות סמלים)
זהה בדיוק לאזהרה לעיל, אבל עבור מספר קבצים בינאריים.
בינרי צריך לֹא be צמוד נגד ספריה (זה שימושים אף לא אחד of מה היא ספריות סמלים)
השמיים בינרי מקושר לספרייה שהוא לא צריך. זו לא בעיה אבל חלק
שיפורי ביצועים קטנים בזמן טעינה בינאריים ניתן להשיג על ידי אי קישור
ספריה זו לבינארי זה. אזהרה זו בודקת את אותו מידע מאשר
הקודם אבל עושה את זה עבור כל בינארי במקום לבצע את הבדיקה גלובלית על כולם
בינאריים מנותחים.
שגיאות
dpkg-shlibdeps ייכשל אם הוא לא יכול למצוא ספרייה ציבורית בשימוש בינארי או אם זה
לספרייה אין מידע תלות משויך (או קובץ shlibs או קובץ symbols). א
לספרייה הציבורית יש SONAME והיא מנוסחת (libsomething.so.X). ספרייה פרטית (כמו
תוסף) לא צריך להיות SONAME ואין צורך בגירסה.
לא יכול למצוא ספריה ספרייה-soname נחוץ by בינרי (שֶׁלָה RPATH is 'rpath')
השמיים בינרי משתמש בספרייה בשם ספרייה-soname אבל dpkg-shlibdeps לא היה מסוגל
כדי למצוא את הספרייה. dpkg-shlibdeps יוצר רשימה של ספריות לסימון
הבאות: ספריות הרשומות ב-RPATH של הבינארי, ספריות רשומות ב
/etc/ld.so.conf, ספריות שנוספו על ידי -l אפשרות, ספריות המפורטות ב-
LD_LIBRARY_PATH משתנה סביבה וספריות ציבוריות סטנדרטיות (/ lib,
/ Usr / lib, /lib32, / usr / lib32, /lib64, /usr/lib64). ואז זה בודק את המדריכים האלה
בעץ ה-build של החבילה של הבינארי המנותח, ב-build של החבילות
עצים המצוינים עם -S אפשרות שורת הפקודה, בעצי הבנייה של חבילות אחרות
שמכיל קובץ DEBIAN/shlibs או DEBIAN/symbols ולבסוף בשורש
מַדרִיך. אם הספרייה לא נמצאת באף אחת מהספריות האלה, אתה מקבל
שגיאה זו.
אם הספרייה שלא נמצאה נמצאת בספרייה פרטית של אותה חבילה, אז אתה
רוצה להוסיף את הספרייה עם -l. אם זה נמצא בחבילה בינארית אחרת שנבנית,
אתה רוצה לוודא שקובץ shlibs/symbols של חבילה זו כבר נמצא
נוצר וזה -l מכיל את הספרייה המתאימה אם היא גם בפרטי
במדריך.
לא התלות מידע מצא ל קובץ ספרייה (בשימוש by בינרי).
הספרייה הדרושה על ידי בינרי נמצא על ידי dpkg-shlibdeps in קובץ ספרייה אבל
dpkg-shlibdeps לא הצליח למצוא מידע על תלות עבור ספריה זו.
כדי לגלות את התלות, הוא ניסה למפות את הספרייה לחבילת דביאן
בעזרת dpkg -S קובץ ספרייה. ואז זה בדק את השלבים המתאימים
וקבצי סמלים ב /var/lib/dpkg/info/, ובחבילות השונות לבנות עצים
(debian/*/DEBIAN/).
כשל זה יכול להיגרם על ידי קובץ shlibs או symbols רע או חסר ב-
חבילה של הספרייה. זה עלול לקרות גם אם הספרייה בנויה בתוך
אותה חבילת מקור ואם קבצי shlibs עדיין לא נוצרו (במקרה זה
עליך לתקן את כללים/debian כדי ליצור את ה-shlibs לפני הקריאה dpkg-shlibdeps). רַע
RPATH יכול גם להוביל לכך שהספרייה תימצא תחת שם לא קנוני (לדוגמה:
/usr/lib/openoffice.org/../lib/libssl.so.0.9.8 במקום /usr/lib/libssl.so.0.9.8)
זה לא משויך לאף חבילה, dpkg-shlibdeps מנסה לעקוף את זה על ידי
מנסה לחזור לשם קנוני (באמצעות שביל אמיתי(3)) אבל אולי זה לא תמיד
עֲבוֹדָה. תמיד עדיף לנקות את ה-RPATH של הבינארי כדי למנוע בעיות.
יִעוּד dpkg-shlibdeps במצב מילולי (-v) יספק הרבה יותר מידע
על המקום שבו הוא ניסה למצוא את מידע התלות. זה עשוי להיות שימושי אם
אתה לא מבין למה זה נותן לך את השגיאה הזו.
השתמש ב-dpkg-shlibdeps באופן מקוון באמצעות שירותי onworks.net
