abicompat - ক্লাউডে অনলাইন

এটি হল অ্যাবিকমপ্যাট কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


abicompat - ABI সামঞ্জস্যতা পরীক্ষা করুন

abicompat চেক করে যে একটি অ্যাপ্লিকেশন যা একটি প্রদত্ত ভাগ করা লাইব্রেরির সাথে লিঙ্ক করে তা এখনও রয়েছে
ABI সেই লাইব্রেরির পরবর্তী সংস্করণের সাথে সামঞ্জস্যপূর্ণ। এর নতুন সংস্করণ হলে
লাইব্রেরি একটি ABI অসামঞ্জস্যতা প্রবর্তন করে, তারপর abicompat ব্যবহারকারীকে ঠিক কী বিষয়ে ইঙ্গিত দেয়
যে অসঙ্গতি হয়.

আমন্ত্রণ


abicompat [বিকল্প] [ ]

বিকল্প


· --help

কমান্ড এবং প্রস্থান সম্পর্কে একটি সংক্ষিপ্ত সাহায্য প্রদর্শন করুন।

· --সংস্করণ | -v

প্রোগ্রামটির সংস্করণ প্রদর্শন করুন এবং প্রস্থান করুন।

· --তালিকা-অনির্ধারিত-প্রতীক | -u

অ্যাপ্লিকেশনের অনির্ধারিত প্রতীকগুলির তালিকা প্রদর্শন করুন এবং প্রস্থান করুন।

· --প্রদর্শন-বেস-নাম | -b

টুল দ্বারা নির্গত ফলাফল রিপোর্টে, এই বিকল্পটি অ্যাপ্লিকেশন করে এবং
লাইব্রেরিগুলিকে শুধুমাত্র তাদের মূল নাম দ্বারা উল্লেখ করা হবে; সম্পূর্ণ পরম নামে নয়। এই
স্ক্রিপ্টগুলিতে ব্যবহারের জন্য দরকারী হতে পারে যা অ্যাপ্লিকেশনের নাম তুলনা করতে চায় এবং
লাইব্রেরি স্বাধীনভাবে তাদের ডিরেক্টরির নাম কি।

· --অ্যাপ-ডিবাগ-তথ্য-ডির

যে ডিরেক্টরির অধীনে অ্যাপ্লিকেশনটির ডিবাগ তথ্য রয়েছে তার পাথ সেট করুন
আউট করা অনুমিত. এটি অ্যাপ্লিকেশন বাইনারিগুলির জন্য দরকারী যার জন্য ডিবাগ
তথ্য ফাইলগুলির একটি পৃথক সেটে রয়েছে।

· --lib-debug-info-dir1

ডিরেক্টরির পাথ সেট করুন যার অধীনে প্রথম সংস্করণের ডিবাগ তথ্য
শেয়ার্ড লাইব্রেরি পাড়া করা অনুমিত হয়. এটি ভাগ করা লাইব্রেরির জন্য দরকারী
বাইনারি যার জন্য ডিবাগ তথ্য ফাইলের একটি পৃথক সেটে থাকে।

· --lib-debug-info-dir2

ডিরেক্টরির পাথ সেট করুন যার অধীনে দ্বিতীয় সংস্করণের ডিবাগ তথ্য
শেয়ার্ড লাইব্রেরি পাড়া করা অনুমিত হয়. এটি ভাগ করা লাইব্রেরির জন্য দরকারী
বাইনারি যার জন্য ডিবাগ তথ্য ফাইলের একটি পৃথক সেটে থাকে।

· --নো-শো-লক্স
কোথায় সম্পর্কে তথ্য দেখান না দ্বিতীয় ভাগ লাইব্রেরি সম্পর্কিত
প্রকার পরিবর্তন করা হয়েছে।

· --দুর্বল-মোড

এই দুর্বল মোড ট্রিগার abicompat. এই মোডে, শুধুমাত্র একটি সংস্করণ
লাইব্রেরি প্রয়োজন। অর্থাৎ, অ্যাবিকমপ্যাট এইভাবে আহ্বান করা হয়েছে:

abicompat -- দুর্বল-মোড

উল্লেখ্য যে --দুর্বল-মোড বিকল্পটি এমনকি বাদ দেওয়া যেতে পারে যদি শুধুমাত্র একটি সংস্করণ
অ্যাপ্লিকেশন সহ লাইব্রেরি দেওয়া হয়; এই ক্ষেত্রে, abicompat স্বয়ংক্রিয়ভাবে
দুর্বল মোডে কাজ করতে সুইচ করে:

abicompat

এই দুর্বল মোডে, লাইব্রেরি দ্বারা রপ্তানি করা ফাংশন এবং ভেরিয়েবলের প্রকার এবং
অ্যাপ্লিকেশন দ্বারা গ্রাস করা হয় (যেমন, এই ফাংশন এবং ভেরিয়েবলের প্রতীক
অ্যাপ্লিকেশনে অনির্ধারিত এবং লাইব্রেরি দ্বারা সংজ্ঞায়িত এবং রপ্তানি করা হয়)
অ্যাপ্লিকেশন দ্বারা প্রত্যাশিত এই ধরনের সংস্করণের তুলনায়. এবং যদি এই
দুই ধরনের সংস্করণ ভিন্ন, abicompat পার্থক্য কি ব্যবহারকারীকে বলে
আছে।

অন্য কথায়, এই মোডে, abicompat পরীক্ষা করে যে ফাংশনের প্রকার এবং
লাইব্রেরি দ্বারা রপ্তানি করা ভেরিয়েবলের অর্থ একই জিনিস যা অ্যাপ্লিকেশনটির মতো
আশা করে, যতদূর এবিআই উদ্বিগ্ন।

উল্লেখ্য যে এই মোডে, 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 না সেট করুন, তাহলে এর মানে হল যে ABIs তুলনা করা হতে পারে
বা সামঞ্জস্যপূর্ণ নাও হতে পারে। সেই ক্ষেত্রে, একজন মানুষের ABI পরিবর্তনগুলি পর্যালোচনা করতে হবে
তারা সামঞ্জস্যপূর্ণ কিনা তা সিদ্ধান্ত নিতে।

অবশিষ্ট বিট এই মুহূর্তের জন্য ব্যবহার করা হয় না.

, USAGE উদাহরণ


একটি নতুন ভাগ করা লাইব্রেরি সংস্করণে একটি সম্ভাব্য ABI অসঙ্গতি সনাক্ত করা:

$ cat -n test0.h
1 struct foo
৫ {
3 int m0;
4
5 foo()
6 : m0()
৭ {}
8};
9
10 ফুট*
11 first_func();
12
13 অকার্যকর
14 সেকেন্ড_ফাঙ্ক(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 int
৭টি প্রধান()
৫ {
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টি প্রথম_ফাঙ্ক()
৫ {
9 foo* f = new foo();
10 রিটার্ন চ;
11}
12
13 অকার্যকর
14 সেকেন্ড_ফাঙ্ক(foo&)
৫ {
16}
17
18 অকার্যকর
19 থার্ড_ফাঙ্ক()
৫ {
21}
$

$ cat -n test1.h
1 struct foo
৫ {
3 int m0;
4 চর m1; /* <-- এখানে একজন নতুন সদস্য যোগ করা হয়েছে! */
5
6 foo()
7 : m0(),
8 m1()
৭ {}
10};
11
12 ফুট*
13 first_func();
14
15 অকার্যকর
16 সেকেন্ড_ফাঙ্ক(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টি প্রথম_ফাঙ্ক()
৫ {
9 foo* f = new foo();
10 রিটার্ন চ;
11}
12
13 অকার্যকর
14 সেকেন্ড_ফাঙ্ক(foo&)
৫ {
16}
17
18 /* আসুন থার্ড_ফাঙ্ক () এর সংজ্ঞাটি মন্তব্য করি
19 অকার্যকর
20 থার্ড_ফাঙ্ক()
৫ {
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 সামঞ্জস্যপূর্ণ কিনা তা দেখতে, সম্মানের সাথে
libtest-0.so এর ABI-তে:

$ abicompat test-app libtest-0.so libtest-1.so
নীচের 'libtest-1.so'-এর সাথে পার্থক্যের কারণে ELF ফাইল 'test-app' 'libtest-0.so'-এর সাথে ABI সামঞ্জস্যপূর্ণ নাও হতে পারে:
ফাংশন পরিবর্তনের সারাংশ: 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&)'-এর কিছু পরোক্ষ সাব-টাইপ পরিবর্তন আছে:
'foo&' টাইপের প্যারামিটার 0 এ সাব-টাইপ পরিবর্তন আছে:
উল্লেখিত টাইপ 'struct foo' পরিবর্তিত হয়েছে, যেমনটি আগে রিপোর্ট করা হয়েছে

$

· এখন abicompat এর দুর্বল মোড ব্যবহার করুন, অর্থাৎ, শুধুমাত্র অ্যাপ্লিকেশন এবং প্রদান করে
লাইব্রেরির নতুন সংস্করণ:

$ abicompat --weak-mode test-app libtest-1.so
লাইব্রেরিতে সংজ্ঞায়িত ফাংশন
'libtest-1.so'
উপ-প্রকার আছে যা কোন অ্যাপ্লিকেশন থেকে ভিন্ন
'পরীক্ষা-অ্যাপ'
প্রত্যাশা করে:

ফাংশন foo* first_func():
রিটার্ন টাইপ পরিবর্তিত:
নির্দেশিতভাবে 'struct foo' টাইপ করুন:
আকার 32 থেকে 64 বিট পরিবর্তিত হয়েছে
1 ডেটা সদস্য সন্নিবেশ:
'char foo::m1', অফসেট 32 এ (বিটগুলিতে)

$

onworks.net পরিষেবা ব্যবহার করে অনলাইনে abicompat ব্যবহার করুন



সর্বশেষ লিনাক্স এবং উইন্ডোজ অনলাইন প্রোগ্রাম