انگلیسیفرانسویاسپانیایی

Ad


فاویکون OnWorks

abicompat - آنلاین در ابر

abicompat را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور abicompat است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


abicompat - سازگاری ABI را بررسی کنید

abicompat بررسی می‌کند که برنامه‌ای که با یک کتابخانه مشترک پیوند داده شده هنوز وجود دارد
ABI با نسخه بعدی آن کتابخانه سازگار است. اگر نسخه جدید از
کتابخانه یک ناسازگاری ABI را معرفی می کند، سپس abicompat به کاربر اشاره می کند که دقیقاً چه چیزی چیست
که ناسازگاری است.

فراخوانی


abicompat [گزینه ها] [ ]

OPTIONS


· --کمک

یک راهنمای کوتاه در مورد فرمان و خروج نمایش دهید.

· - نسخه | -v

نسخه برنامه را نمایش دهید و از آن خارج شوید.

· --list-undefined-symbols | -u

نمایش لیست نمادهای تعریف نشده برنامه و خروج.

· -نامهای پایه را نشان می دهد | -b

در گزارش حاصل که توسط ابزار ساطع می شود، این گزینه اپلیکیشن و
کتابخانه ها فقط با نام پایه خود ارجاع داده می شوند. نه با نام مطلق کامل این
می تواند برای استفاده در اسکریپت هایی که می خواهند نام برنامه ها را با هم مقایسه کنند مفید باشد
کتابخانه ها مستقل از نام دایرکتوری آنها.

· --app-debug-info-dir

مسیر دایرکتوری را که اطلاعات اشکال زدایی برنامه در آن قرار دارد، تنظیم کنید
قرار است گذاشته شود این برای برنامه های باینری که اشکال زدایی دارند مفید است
اطلاعات در یک مجموعه جداگانه از فایل ها است.

· --lib-debug-info-dir1

مسیر دایرکتوری را تنظیم کنید که در آن اطلاعات اشکال زدایی نسخه اول وجود دارد
از کتابخانه مشترک قرار است گذاشته شود. این برای کتابخانه مشترک مفید است
باینری هایی که اطلاعات اشکال زدایی در مجموعه جداگانه ای از فایل ها وجود دارد.

· --lib-debug-info-dir2

مسیر دایرکتوری را تنظیم کنید که در آن اطلاعات اشکال زدایی نسخه دوم وجود دارد
از کتابخانه مشترک قرار است گذاشته شود. این برای کتابخانه مشترک مفید است
باینری هایی که اطلاعات اشکال زدایی در مجموعه جداگانه ای از فایل ها وجود دارد.

· --no-show-locs
اطلاعات مربوط به جایی که در دوم به اشتراک گذاشته شده کتابخانه مربوطه
نوع عوض شد

· - حالت ضعیف

این حالت ضعیف را تحریک می کند abicompat. در این حالت فقط یک نسخه از
کتابخانه مورد نیاز است یعنی abicompat به این صورت فراخوانی می شود:

abicompat - حالت ضعیف

توجه داشته باشید که - حالت ضعیف حتی اگر فقط یک نسخه از گزینه وجود داشته باشد، می توان گزینه را حذف کرد
کتابخانه همراه با برنامه ارائه شده است. در این مورد، abicompat بطور خودکار
سوئیچ ها برای عملکرد در حالت ضعیف:

abicompat

در این حالت ضعیف، انواع توابع و متغیرهای صادر شده توسط کتابخانه و
مصرف شده توسط برنامه (مانند نمادهای این توابع و متغیرها
در برنامه تعریف نشده و توسط کتابخانه تعریف و صادر می شوند) هستند
در مقایسه با نسخه ای از این نوع همانطور که توسط برنامه انتظار می رود. و اگر اینها
دو نسخه از انواع متفاوت است، abicompat به کاربر می گوید که چه تفاوت هایی دارد
هستند.

به عبارت دیگر، در این حالت، abicompat بررسی می کند که انواع توابع و
متغیرهای صادر شده توسط کتابخانه به معنای همان برنامه کاربردی هستند
انتظار می رود، تا آنجا که به ABI مربوط می شود.

توجه داشته باشید که در این حالت، abicompat توابع یا متغیرهای صادر شده را شناسایی نمی کند
(نمادها) که توسط برنامه مورد انتظار است اما از کتابخانه حذف شده اند.
به همین دلیل نامیده می شود ضعیف حالت.

برگشت ارزش


کد خروج از abicompat اگر ABI باینری ها موجود باشند، دستور 0 است
مقایسه‌ها مساوی یا غیر صفر هستند، اگر متفاوت باشند یا اگر ابزار با خطا مواجه شده باشد.

در مورد بعدی، کد خروج یک فیلد بیتی 8 بیتی است که در آن هر بیت دارای یک
معنی خاص

بیت اول، با ارزش 1، نامگذاری شده است ABIDIFF_ERROR یعنی خطایی وجود داشت

بیت دوم، با ارزش 2، نامگذاری شده است ABIDIFF_USAGE_ERROR یعنی خطایی در راه بوده است
کاربر ابزار را فراخوانی کرد. برای مثال، اگر کاربر ابزار را فراخوانی کند، ممکن است تنظیم شود
با سوئیچ خط فرمان ناشناخته، با عدد یا آرگومان اشتباه و غیره اگر این بیت باشد
مجموعه، سپس ABIDIFF_ERROR بیت نیز باید تنظیم شود.

بیت سوم، با ارزش 4، نامگذاری شده است ABIDIFF_ABI_CHANGE یعنی ABI موجودات باینری
مقایسه شده متفاوت است.

بیت چهارم، با ارزش 8، نامگذاری شده است ABIDIFF_ABI_INCOMPATIBLE_CHANGE به معنی ABI از
مقایسه باینری ها به روشی ناسازگار متفاوت است. اگر این بیت تنظیم شده باشد،
ABIDIFF_ABI_CHANGE بیت نیز باید تنظیم شود. اگر ABIDIFF_ABI_CHANGE تنظیم شده است و
ABIDIFF_INCOMPATIBLE_CHANGE is نه تنظیم کنید، پس به این معنی است که ABI های مورد مقایسه ممکن است
یا ممکن است سازگار نباشد. در این صورت، یک انسان باید تغییرات ABI را بررسی کند
برای تصمیم گیری در مورد سازگاری یا عدم سازگاری آنها.

بیت های باقی مانده در حال حاضر استفاده نمی شوند.

طریقه استفاده مثال ها


· تشخیص ناسازگاری احتمالی ABI در نسخه جدید کتابخانه مشترک:

$ cat -n test0.h
1 struct foo
2 {
3 اینت m0;
4
5 foo()
6 : m0()
7،XNUMX،XNUMX {}
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 #شامل "test0.h"
5
6 بین
7 اصلی ()
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 #شامل "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 اینت m0;
4 کاراکتر متر مربع; /* <-- یک عضو جدید در اینجا اضافه شد! */
5
6 foo()
7 : m0(),
8 متر مربع ()
9،XNUMX،XNUMX {}
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 #شامل "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 /* بیایید تعریف سوم_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

· در حال حاضر، استفاده کنید abicompat برای دیدن اینکه آیا libtest-1.so با ABI با برنامه سازگار است یا خیر
به ABI libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
ممکن است فایل ELF «test-app» با «libtest-1.so» سازگاری ABI نداشته باشد زیرا با «libtest-0.so» زیر تفاوت دارد:
خلاصه تغییرات توابع: 0 حذف، 2 تغییر، 0 توابع اضافه شده
خلاصه تغییرات متغیرها: 0 حذف شده، 0 تغییر، 0 متغیر اضافه شده است

2 تابع با برخی تغییرات غیرمستقیم زیرنوع:

[C]'function foo* first_func()' دارای برخی تغییرات غیرمستقیم در نوع فرعی است:
نوع بازگشت تغییر کرد:
در اشاره کرد تا «struct foo» را تایپ کنید:
اندازه از 32 به 64 بیت تغییر کرد
1 درج عضو داده:
'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 بیت تغییر کرد
1 درج عضو داده:
'char foo::m1'، در افست 32 (به بیت)

$

از abicompat آنلاین با استفاده از خدمات onworks.net استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

دستورات لینوکس

Ad