यह कमांड एबिकॉम्पैट है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
abicompat - ABI संगतता की जाँच करें
abicompat यह जांचता है कि किसी दिए गए साझा लाइब्रेरी से लिंक करने वाला एप्लिकेशन अभी भी है या नहीं
एबीआई उस लाइब्रेरी के अगले संस्करण के साथ संगत है। यदि का नया संस्करण
लाइब्रेरी एक ABI असंगति का परिचय देती है, फिर abicompat उपयोगकर्ता को वास्तव में क्या संकेत देता है
वह असंगति है.
मंगलाचरण
एबिकॉम्पैट [विकल्प] [ ]
विकल्प
· --मदद
आदेश और बाहर निकलने के बारे में एक संक्षिप्त सहायता प्रदर्शित करें।
· --संस्करण | -v
कार्यक्रम का संस्करण प्रदर्शित करें और बाहर निकलें।
· --सूची-अपरिभाषित-प्रतीक | -u
एप्लिकेशन के अपरिभाषित प्रतीकों की सूची प्रदर्शित करें और बाहर निकलें।
· --दिखाएँ-आधार-नाम | -b
टूल द्वारा उत्सर्जित परिणामी रिपोर्ट में, यह विकल्प एप्लिकेशन बनाता है और
पुस्तकालयों को केवल उनके आधार नामों से ही संदर्भित किया जाना चाहिए; पूर्ण निरपेक्ष नाम से नहीं. यह
उन स्क्रिप्ट्स में उपयोग के लिए उपयोगी हो सकता है जो एप्लिकेशन के नामों की तुलना करना चाहते हैं और
पुस्तकालय स्वतंत्र रूप से उनकी निर्देशिका के नाम क्या हैं।
· --ऐप-डिबग-जानकारी-dir
उस निर्देशिका का पथ सेट करें जिसके अंतर्गत एप्लिकेशन की डिबग जानकारी है
रखा जाना चाहिए। यह एप्लिकेशन बायनेरिज़ के लिए उपयोगी है जिसके लिए डीबग होता है
जानकारी फ़ाइलों के एक अलग सेट में है।
· --lib-डीबग-जानकारी-dir1
उस निर्देशिका का पथ सेट करें जिसके अंतर्गत पहले संस्करण की डीबग जानकारी है
साझा लाइब्रेरी का खाका तैयार किया जाना चाहिए। यह साझा लाइब्रेरी के लिए उपयोगी है
बायनेरिज़ जिसके लिए डिबग जानकारी फ़ाइलों के एक अलग सेट में है।
· --lib-डीबग-जानकारी-dir2
उस निर्देशिका का पथ सेट करें जिसके अंतर्गत दूसरे संस्करण की डिबग जानकारी है
साझा लाइब्रेरी का खाका तैयार किया जाना चाहिए। यह साझा लाइब्रेरी के लिए उपयोगी है
बायनेरिज़ जिसके लिए डिबग जानकारी फ़ाइलों के एक अलग सेट में है।
· --नो-शो-लोक्स
में कहां के बारे में जानकारी न दिखाएं दूसरा साझा पुस्तकालय अपने अपने
प्रकार बदल दिया गया।
· --कमज़ोर-मोड
यह के कमजोर मोड को ट्रिगर करता है abicompat. इस मोड में, का केवल एक संस्करण
पुस्तकालय की आवश्यकता है. अर्थात्, एबिकोम्पैट को इस प्रकार लागू किया जाता है:
एबिकॉम्पैट--कमज़ोर-मोड
ध्यान दें कि --कमज़ोर-मोड विकल्प को छोड़ा भी जा सकता है यदि इसका केवल एक ही संस्करण हो
आवेदन के साथ पुस्तकालय दिया गया है; उस मामले में, abicompat स्वतः
कमजोर मोड में काम करने के लिए स्विच:
abicompat
इस कमजोर मोड में, लाइब्रेरी द्वारा निर्यात किए गए फ़ंक्शंस और वेरिएबल्स के प्रकार
एप्लिकेशन द्वारा उपभोग किया गया (जैसा कि, इन कार्यों और चर के प्रतीकों में)।
एप्लिकेशन में अपरिभाषित हैं और लाइब्रेरी द्वारा परिभाषित और निर्यात किए गए हैं) हैं
एप्लिकेशन द्वारा अपेक्षित इन प्रकारों के संस्करण की तुलना में। और यदि ये
प्रकार के दो संस्करण भिन्न हैं, abicompat उपयोगकर्ता को बताता है कि क्या अंतर हैं
कर रहे हैं.
दूसरे शब्दों में, इस विधा में, abicompat जाँचता है कि कार्यों के प्रकार और
लाइब्रेरी द्वारा निर्यात किए गए वेरिएबल का मतलब वही होता है जो एप्लिकेशन का होता है
उम्मीद है, जहां तक एबीआई का सवाल है।
ध्यान दें कि इस मोड में, abicompat निर्यातित फ़ंक्शंस या वेरिएबल्स का पता नहीं लगाता है
(प्रतीक) जो एप्लिकेशन द्वारा अपेक्षित हैं लेकिन जिन्हें लाइब्रेरी से हटा दिया गया है।
इसीलिए इसे कहा जाता है कमज़ोर मोड।
वापसी मान
का निकास कोड abicompat यदि बायनेरिज़ का एबीआई है तो कमांड या तो 0 है
यदि तुलना की गई है तो वे समान हैं, या गैर-शून्य हैं यदि वे भिन्न हैं या यदि उपकरण में कोई त्रुटि आई है।
बाद के मामले में, निकास कोड एक 8-बिट-चौड़ा बिट फ़ील्ड है जिसमें प्रत्येक बिट में एक होता है
विशिष्ट अर्थ.
मान 1 का पहला बिट, नाम दिया गया ABIDIFF_ERROR मतलब कोई त्रुटि थी.
मान 2 का दूसरा बिट, नाम दिया गया ABIDIFF_USAGE_ERROR इसका मतलब है कि रास्ते में कोई त्रुटि थी
उपयोगकर्ता ने टूल का आह्वान किया. उदाहरण के लिए, यदि उपयोगकर्ता ने टूल का आह्वान किया तो इसे सेट किया जा सकता है
किसी अज्ञात कमांड लाइन स्विच के साथ, किसी गलत संख्या या तर्क आदि के साथ। यदि यह बिट है
सेट करें, फिर ABIDIFF_ERROR बिट भी सेट होना चाहिए.
मान 4 का तीसरा बिट, नाम दिया गया ABIDIFF_ABI_परिवर्तन इसका अर्थ है बायनेरिज़ का ABI
तुलना भिन्न हैं।
मान 8 का चौथा बिट, नाम दिया गया ABIDIFF_ABI_INCOMPATIBLE_CHANGE का मतलब है ABI
तुलना की गई बायनेरिज़ असंगत तरीके से भिन्न हैं। यदि यह बिट सेट है, तो
ABIDIFF_ABI_परिवर्तन बिट भी सेट होना चाहिए. यदि ABIDIFF_ABI_परिवर्तन सेट है और
ABIDIFF_INCOMPATIBLE_CHANGE is नहीं सेट करें, तो इसका मतलब है कि एबीआई की तुलना की जा सकती है
या संगत नहीं हो सकता है. उस स्थिति में, एक इंसान को एबीआई परिवर्तनों की समीक्षा करने की आवश्यकता है
यह तय करने के लिए कि वे संगत हैं या नहीं।
शेष बिट्स का फिलहाल उपयोग नहीं किया गया है।
उपयोग उदाहरण
· नए साझा लाइब्रेरी संस्करण में संभावित एबीआई असंगति का पता लगाना:
$ कैट-एन टेस्ट0.एच
1 संरचना फू
2 {
3 पूर्णांक m0;
4
5 फू()
6 : एम0()
7 {}
8 };
9
10 फू*
11 फर्स्ट_फंक();
12
13 शून्य
14 सेकंड_फंक(फू&);
15
16 शून्य
17 थर्ड_फंक();
$
$ cat -n test-app.cc
1 // इसके साथ संकलित करें:
2 // जी++ -जी -वॉल -ओ टेस्ट-ऐप -एल। -ltest-0 test-app.cc
3
4 # "test0.h" शामिल करें
5
6 इंट
7 मुख्य()
8 {
9 फू* एफ = फर्स्ट_फंक();
10 सेकंड_फंक(*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 फर्स्ट_फंक()
8 {
9 फू* एफ = नया फू();
10 रिटर्न एफ;
11}
12
13 शून्य
14 सेकंड_फंक(फू&)
15 {
16}
17
18 शून्य
19 थर्ड_फंक()
20 {
21}
$
$ कैट-एन टेस्ट1.एच
1 संरचना फू
2 {
3 पूर्णांक m0;
4 चार एम1; /* <- यहां एक नया सदस्य जोड़ा गया है! */
5
6 फू()
7 : एम0(),
8 एम1()
9 {}
10 };
11
12 फू*
13 फर्स्ट_फंक();
14
15 शून्य
16 सेकंड_फंक(फू&);
17
18 शून्य
19 थर्ड_फंक();
$
$ cat -n test1.cc
1 // इसे इसके साथ संकलित करें:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 # "test1.h" शामिल करें
5
6 फू*
7 फर्स्ट_फंक()
8 {
9 फू* एफ = नया फू();
10 रिटर्न एफ;
11}
12
13 शून्य
14 सेकंड_फंक(फू&)
15 {
16}
17
18 /* आइए थर्ड_फंक() की परिभाषा पर टिप्पणी करें
19 शून्य
20 थर्ड_फंक()
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
· एप्लिकेशन को संकलित करें और इसे लाइब्रेरी के पहले संस्करण से लिंक करें,
का निर्माण परीक्षण-ऐप बाइनरी:
$ जी++ -जी -वॉल -ओ टेस्ट-ऐप -एल। -ltest-0.so test-app.cc
· अब, उपयोग करें abicompat यह देखने के लिए कि क्या libtest-1.so एबीआई ऐप के साथ संगत है, सम्मानपूर्वक
libtest-0.so के ABI के लिए:
$ abicompat टेस्ट-ऐप libtest-0.so libtest-1.so
नीचे दिए गए 'libtest-1.so' के साथ अंतर के कारण ELF फ़ाइल 'टेस्ट-ऐप' 'libtest-0.so' के साथ ABI संगत नहीं हो सकती है:
फ़ंक्शंस परिवर्तन सारांश: 0 हटाए गए, 2 बदले गए, 0 फ़ंक्शंस जोड़े गए
वेरिएबल परिवर्तन सारांश: 0 हटाया गया, 0 बदला गया, 0 वेरिएबल जोड़ा गया
कुछ अप्रत्यक्ष उप-प्रकार परिवर्तन के साथ 2 कार्य:
[सी]'फंक्शन फू* फर्स्ट_फंक()' में कुछ अप्रत्यक्ष उप-प्रकार परिवर्तन हैं:
वापसी प्रकार बदला गया:
'struct foo' टाइप करने का संकेत दिया गया है:
आकार 32 से 64 बिट्स में बदल गया
1 डेटा सदस्य प्रविष्टि:
'char foo::m1', ऑफसेट 32 पर (बिट्स में)
[सी]'फंक्शन वॉयड सेकेंड_फंक(फू&)' में कुछ अप्रत्यक्ष उप-प्रकार परिवर्तन हैं:
'foo&' प्रकार के पैरामीटर 0 में उप-प्रकार परिवर्तन हैं:
जैसा कि पहले बताया गया है, संदर्भित प्रकार 'स्ट्रक्चर फू' बदल गया है
$
· अब abicompat के कमजोर मोड का उपयोग करें, यानी, केवल एप्लिकेशन और प्रदान करना
लाइब्रेरी का नया संस्करण:
$ abicompat --weak-mode test-app libtest-1.so
पुस्तकालय में परिभाषित कार्य
'libtest-1.so'
ऐसे उप-प्रकार हैं जो किस एप्लिकेशन से भिन्न हैं
'परीक्षण-ऐप'
अपेक्षा:
फ़ंक्शन फू* फर्स्ट_फंक():
वापसी प्रकार बदला गया:
'struct foo' टाइप करने का संकेत दिया गया है:
आकार 32 से 64 बिट्स में बदल गया
1 डेटा सदस्य प्रविष्टि:
'char foo::m1', ऑफसेट 32 पर (बिट्स में)
$
onworks.net सेवाओं का उपयोग करके abicompat का ऑनलाइन उपयोग करें