عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

abicompat - عبر الإنترنت في السحابة

قم بتشغيل abicompat في مزود استضافة OnWorks المجاني عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر abicompat الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


abicompat - تحقق من توافق ABI

يتحقق abicompat من أن التطبيق الذي يرتبط بمكتبة مشتركة معينة لا يزال
ABI متوافق مع إصدار لاحق من تلك المكتبة. إذا كان الإصدار الجديد من
تقدم مكتبة عدم توافق ABI ، ثم يلمح abicompat المستخدم إلى ما هو بالضبط
هذا التعارض.

استدعاء


abicompat [خيارات] [ ]

OPTIONS


· --مساعدة

عرض تعليمات قصيرة حول الأمر والخروج.

· --الإصدار | -v

عرض نسخة البرنامج والخروج.

· --رموز غير محددة | -u

عرض قائمة الرموز غير المعرفة للتطبيق والخروج.

· - إظهار الأسماء الأساسية | -b

في التقرير الناتج الصادر عن الأداة ، يجعل هذا الخيار التطبيق و
يشار إلى المكتبات بأسمائها الأساسية فقط ؛ ليس بالاسم المطلق الكامل. هذا
يمكن أن يكون مفيدًا للاستخدام في البرامج النصية التي تريد مقارنة أسماء التطبيق و
المكتبات بصرف النظر عن أسماء الدلائل الخاصة بها.

· --app-debug-info-dir

عيّن المسار إلى الدليل الذي توجد تحته معلومات التصحيح الخاصة بالتطبيق
من المفترض أن توضع. هذا مفيد لثنائيات التطبيق التي يتم فيها تصحيح الأخطاء
المعلومات موجودة في مجموعة منفصلة من الملفات.

· --lib-debug-info-dir1

عيّن المسار إلى الدليل الذي تحته معلومات التصحيح للإصدار الأول
من المفترض أن يتم تخطيط المكتبة المشتركة. هذا مفيد للمكتبة المشتركة
الثنائيات التي تكون معلومات التصحيح الخاصة بها في مجموعة منفصلة من الملفات.

· --lib-debug-info-dir2

عيّن المسار إلى الدليل الذي تحته معلومات التصحيح للإصدار الثاني
من المفترض أن يتم تخطيط المكتبة المشتركة. هذا مفيد للمكتبة المشتركة
الثنائيات التي تكون معلومات التصحيح الخاصة بها في مجموعة منفصلة من الملفات.

· --لا تظهر-المواقع
لا تظهر معلومات حول مكان في ثان شاركت مكتبة المعني
تم تغيير النوع.

· - الوضع الضعيف

يؤدي هذا إلى الوضع الضعيف لـ أبيكومبات. في هذا الوضع ، يوجد إصدار واحد فقط من
المكتبة مطلوبة. أي ، يتم استدعاء abicompat مثل هذا:

abicompat - وضع ضعيف

نلاحظ أن - الوضع الضعيف يمكن حذف الخيار حتى إذا كان إصدار واحد فقط من
يتم توفير مكتبة ، جنبًا إلى جنب مع التطبيق ؛ في هذه الحالة، أبيكومبات تلقائيا
مفاتيح للعمل في الوضع الضعيف:

أبيكومبات

في هذا الوضع الضعيف ، يتم تصدير أنواع الوظائف والمتغيرات بواسطة المكتبة و
يستهلكها التطبيق (كما في رموز هذه الوظائف والمتغيرات
غير معرفة في التطبيق ويتم تعريفها وتصديرها من قبل المكتبة) هي
مقارنة بإصدار هذه الأنواع كما هو متوقع من قبل التطبيق. وإذا كانت هذه
نسختان من الأنواع مختلفة ، أبيكومبات يخبر المستخدم ما هي الاختلافات
هي.

بمعنى آخر ، في هذا الوضع ، أبيكومبات يتحقق من أن أنواع الوظائف و
المتغيرات التي تصدرها المكتبة تعني نفس الشيء مثل ماهية التطبيق
تتوقع ، فيما يتعلق بـ ABI.

لاحظ أنه في هذا الوضع ، أبيكومبات لا يكتشف الوظائف أو المتغيرات المصدرة
(الرموز) التي يتوقعها التطبيق ولكن تمت إزالتها من المكتبة.
هذا هو سبب تسميته ضعيف واسطة.

عودة القيم


كود الخروج من أبيكومبات يكون الأمر إما 0 إذا كان ABI للثنائيات
المقارنة متساوية أو غير صفرية إذا كانت مختلفة أو إذا واجهت الأداة خطأ.

في الحالة اللاحقة ، يكون رمز الخروج عبارة عن حقل بت بعرض 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 في إصدار مكتبة مشتركة جديدة:

القط -n test0.h
1 هيكل فو
2 {
3 int m0 ​​؛
4
5 foo ()
6: م 0 ()
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}
$

القط $ -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 عودة و ؛
11}
12
13 باطل
14 second_func (foo &)
15 {
16}
17
18 باطل
19 Third_func ()
20 {
21}
$

القط -n test1.h
1 هيكل فو
2 {
3 int m0 ​​؛
4 شار م 1 ؛ / * <- تمت إضافة عضو جديد هنا! * /
5
6 foo ()
7: م 0 () ،
8 م 1 ()
9،XNUMX،XNUMX {}
10} ؛
11
12 فو *
13 first_func () ؛
14
15 باطل
16 second_func (foo &) ؛
17
18 باطل
19 third_func () ؛
$

القط $ -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 عودة و ؛
11}
12
13 باطل
14 second_func (foo &)
15 {
16}
17
18 / * دعنا نعلق على تعريف third_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 متغير مضاف

وظيفتان مع بعض التغيير غير المباشر من النوع الفرعي:

[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 $ - تطبيق اختبار الوضع الضعيف libtest-1.so
الوظائف المحددة في المكتبة
"libtest-1.so"
لها أنواع فرعية تختلف عن أي تطبيق
"اختبار التطبيق"
تتوقع:

الوظيفة foo * first_func ():
تم تغيير نوع الإرجاع:
يشير إلى النوع "Struct foo":
تغير الحجم من 32 إلى 64 بت
إدخال عضو واحد للبيانات:
'char foo :: m1' ، عند الإزاحة 32 (بتات)

$

استخدم abicompat عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

أوامر لينكس

Ad