אנגליתצרפתיתספרדי

Ad


סמל OnWorks

abicompat - מקוון בענן

הפעל את abicompat בספק אירוח חינמי של OnWorks על אובונטו אונליין, פדורה אונליין, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

זוהי הפקודה abicompat שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

תָכְנִית:

שֵׁם


abicompat - בדוק תאימות ABI

abicompat בודק שאפליקציה שמקשרת לספרייה משותפת נתונה עדיין
ABI תואם לגרסה הבאה של אותה ספרייה. אם הגרסה החדשה של
הספרייה מציגה חוסר תאימות של ABI, ואז abicompat רומזת למשתמש מה בדיוק
שחוסר התאמה הוא.

קְרִיאָה


abicompat [אפשרויות] [ ]

אפשרויות


· - עזרה

הצג עזרה קצרה על הפקודה ויציאה.

· --גִרְסָה | -v

הצג את גרסת התוכנית וצא.

· -- רשימה-לא מוגדרים-סמלים | -u

הצג את רשימת הסמלים הלא מוגדרים של היישום וצא.

· --הצג שמות-בסיס | -b

בדוח המתקבל על ידי הכלי, אפשרות זו הופכת את היישום ו
לספריות ניתן להתייחס בשמות הבסיס שלהן בלבד; לא בשם מוחלט מלא. זֶה
יכול להיות שימושי לשימוש בסקריפטים שרוצים להשוות בין שמות האפליקציה לבין
ספריות ללא תלות בשמות הספריות שלהן.

· --app-debug-info-dir

הגדר את הנתיב לספרייה שמתחתיה נמצא מידע ניפוי הבאגים של היישום
אמור להיות ערוך. זה שימושי עבור יישומים בינאריים שעבורם ניפוי באגים
המידע נמצא בקבוצה נפרדת של קבצים.

· --lib-debug-info-dir1

הגדר את הנתיב לספרייה שמתחתיה מידע ניפוי הבאגים של הגרסה הראשונה
של הספרייה המשותפת אמורה להיות ערוכה. זה שימושי עבור ספרייה משותפת
קבצים בינאריים שעבורם מידע ניפוי הבאגים נמצא בקבוצה נפרדת של קבצים.

· --lib-debug-info-dir2

הגדר את הנתיב לספרייה שמתחתיה מידע ניפוי הבאגים של הגרסה השנייה
של הספרייה המשותפת אמורה להיות ערוכה. זה שימושי עבור ספרייה משותפת
קבצים בינאריים שעבורם מידע ניפוי הבאגים נמצא בקבוצה נפרדת של קבצים.

· --לא-הופעה-לוקים
אל תציג מידע על היכן ב שני משותף ספריה בהתאמה
הסוג שונה.

· --מצב חלש

זה מפעיל את המצב החלש של אביקומפט. במצב זה, רק גרסה אחת של
חובה ספרייה. כלומר, abicompat מופעל כך:

abicompat --מצב חלש

שים לב כי --מצב חלש ניתן אפילו להשמיט את האפשרות אם רק גרסה אחת של ה-
הספרייה ניתנת, יחד עם היישום; במקרה הזה, אביקומפט באופן אוטומטי
מתגים לפעול במצב חלש:

אביקומפט

במצב חלש זה, סוגי הפונקציות והמשתנים המיוצאים על ידי הספרייה ו
נצרך על ידי היישום (כמו בסמלים של הפונקציות והמשתנים הללו
אינם מוגדרים באפליקציה ומוגדרים ומיוצאים על ידי הספרייה) הם
בהשוואה לגרסה של סוגים אלה כפי שמצופה מהאפליקציה. ואם אלה
שתי גרסאות של סוגים שונות, אביקומפט אומר למשתמש מה ההבדלים
הם.

במילים אחרות, במצב זה, אביקומפט בודק שסוגי הפונקציות ו
משתנים המיוצאים על ידי הספרייה אומרים אותו הדבר כמו היישום
מצפה, מבחינת ה-ABI.

שימו לב שבמצב זה, אביקומפט אינו מזהה פונקציות או משתנים מיוצאים
(סמלים) הצפויים על ידי האפליקציה אך מוסרים מהספרייה.
לכן זה נקרא חלש מצב.

לַחֲזוֹר ערכים


קוד היציאה של אביקומפט הפקודה היא 0 אם ה-ABI של הקבצים הבינאריים הוא
השוואה שווים, או לא אפס אם הם שונים או אם הכלי נתקל בשגיאה.

במקרה המאוחר, קוד היציאה הוא שדה סיביות ברוחב 8 סיביות שבו לכל סיביות יש a
משמעות ספציפית.

הסיבית הראשונה, בעלת ערך 1, נקראת ABIDIFF_ERROR אומר שהייתה שגיאה.

הביט השני, בעל ערך 2, נקרא ABIDIFF_USAGE_ERROR פירושו שהייתה שגיאה בדרך
המשתמש הפעיל את הכלי. זה עשוי להיות מוגדר, למשל, אם המשתמש הפעיל את הכלי
עם מתג שורת פקודה לא ידוע, עם מספר או ארגומנט שגוי וכו' אם הביט הזה הוא
להגדיר, ואז את ABIDIFF_ERROR יש להגדיר גם bit.

הסיבית השלישית, בעלת ערך 4, נקראת ABIDIFF_ABI_CHANGE פירושו ה-ABI של ההוויה הבינארית
בהשוואה שונים.

הסיבית הרביעית, בעלת ערך 8, נקראת ABIDIFF_ABI_INCOMPATIBLE_CHANGE פירושו ה-ABI של ה
בינאריים בהשוואה שונים באופן לא תואם. אם הביט הזה מוגדר, אז ה-
ABIDIFF_ABI_CHANGE יש להגדיר גם bit. אם ה ABIDIFF_ABI_CHANGE מוגדר ואת
ABIDIFF_INCOMPATIBLE_CHANGE is לא מוגדר, אז זה אומר שה-ABIs שמשווים עשויים
או אולי לא תואם. במקרה כזה, אדם צריך לבדוק את השינויים ב-ABI
כדי להחליט אם הם תואמים או לא.

הסיביות הנותרות אינן בשימוש כרגע.

נוהג דוגמאות


· זיהוי אי התאמה אפשרית של ABI בגרסה חדשה של ספרייה משותפת:

$ cat -n test0.h
1 struct foo
2 {
3 int m0;
4
5 foo()
6: m0()
7 {}
8};
9
10 פו*
11 first_func();
12
13 בטל
14 second_func(foo&);
15
16 בטל
17 third_func();
$

$ cat -n test-app.cc
1 // הידור עם:
2 // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
3
4 #include "test0.h"
5
6 אינט
7 main()
8 {
9 foo* f = first_func();
10 second_func(*f);
11 החזר 0;
12}
$

$ cat -n test0.cc
1 // הרכיב את זה עם:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include "test0.h"
5
6 פו*
7 first_func()
8 {
9 foo* f = new foo();
10 חזרה f;
11}
12
13 בטל
14 second_func(foo&)
15 {
16}
17
18 בטל
19 third_func()
20 {
21}
$

$ cat -n test1.h
1 struct foo
2 {
3 int m0;
4 char m1; /* <-- חבר חדש נוסף כאן! */
5
6 foo()
7 : m0(),
8 m1()
9 {}
10};
11
12 פו*
13 first_func();
14
15 בטל
16 second_func(foo&);
17
18 בטל
19 third_func();
$

$ cat -n test1.cc
1 // הרכיב את זה עם:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include "test1.h"
5
6 פו*
7 first_func()
8 {
9 foo* f = new foo();
10 חזרה f;
11}
12
13 בטל
14 second_func(foo&)
15 {
16}
17
18 /* בואו נגיב על ההגדרה של thir_func()
19 בטל
20 third_func()
21 {
22}
23 */
$

· הרכיב את הגרסה הראשונה והשנייה של הספריות: libtest-0.so ו
libtest-1.so:

$ g++ -g -Wall -shared -o libtest-0.so test0.cc
$ g++ -g -Wall -shared -o libtest-1.so test1.cc

· הרכיב את האפליקציה וקשר אותה לגרסה הראשונה של הספרייה,
יוצר את בדיקת אפליקציה בינארי:

$ g++ -g -Wall -o test-app -L. -ltest-0.so test-app.cc

· כעת, השתמש אביקומפט כדי לראות אם libtest-1.so תואם ABI לאפליקציה, בכבוד
ל-ABI של libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
ייתכן שקובץ ELF 'test-app' אינו תואם ABI ל-'libtest-1.so' עקב הבדלים עם 'libtest-0.so' למטה:
תקציר שינויים בפונקציות: 0 הוסר, 2 השתנה, 0 נוספו פונקציות
סיכום שינויים משתנים: 0 הוסר, 0 השתנה, 0 משתנה נוסף

2 פונקציות עם שינוי סוג משנה עקיף:

ל-[C]'function foo* first_func()' יש כמה שינויים מסוג משנה עקיפים:
סוג ההחזרה השתנה:
ב-הצביע על סוג 'struct foo':
הגודל השתנה מ-32 ל-64 סיביות
הוספת חבר נתונים אחד:
'char foo::m1', בהיסט 32 (בסיביות)
ל-[C]'function void second_func(foo&)' יש כמה שינויים מסוג משנה עקיפים:
לפרמטר 0 מסוג 'foo&' יש שינויים בסוגי משנה:
סוג ההפניה 'struct foo' השתנה, כפי שדווח קודם לכן

$

· כעת השתמש במצב החלש של abicompat, כלומר, מתן רק את היישום ואת
גרסה חדשה של הספרייה:

$ abicompat --weak-mode test-app libtest-1.so
פונקציות המוגדרות בספרייה
'libtest-1.so'
יש תת-סוגים שונים מאיזה יישום
'אפליקציה לבדיקה'
מצפה:

function foo* first_func():
סוג ההחזרה השתנה:
ב-הצביע על סוג 'struct foo':
הגודל השתנה מ-32 ל-64 סיביות
הוספת חבר נתונים אחד:
'char foo::m1', בהיסט 32 (בסיביות)

$

השתמש ב-abicompat באינטרנט באמצעות שירותי onworks.net


שרתים ותחנות עבודה בחינם

הורד אפליקציות Windows & Linux

פקודות לינוקס

Ad