abicompat - ออนไลน์ในคลาวด์

นี่คือคำสั่ง abicompat ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


abicompat - ตรวจสอบความเข้ากันได้ของ ABI

abicompat ตรวจสอบว่าแอปพลิเคชันที่เชื่อมโยงกับไลบรารีที่ใช้ร่วมกันที่กำหนดนั้นยังคงอยู่
ABI เข้ากันได้กับห้องสมุดรุ่นต่อมา หากเวอร์ชันใหม่ของ
ห้องสมุดแนะนำความไม่ลงรอยกันของ ABI จากนั้น abicompat จะแนะนำผู้ใช้ในสิ่งที่แน่นอน
ความไม่ลงรอยกันนั้นก็คือ

การร้องขอ


abicompat [ตัวเลือก] [ ]

OPTIONS


· --ช่วยด้วย

แสดงวิธีใช้สั้นๆ เกี่ยวกับคำสั่งและการออก

· --รุ่น | -v

แสดงเวอร์ชันของโปรแกรมและออก

· --list-undefined-สัญลักษณ์ | -u

แสดงรายการสัญลักษณ์ที่ไม่ได้กำหนดของแอปพลิเคชันและออก

· --แสดง-ฐาน-ชื่อ | -b

ในรายงานผลลัพธ์ที่ส่งออกโดยเครื่องมือ ตัวเลือกนี้ทำให้แอปพลิเคชันและ
ไลบรารีถูกอ้างถึงโดยชื่อฐานเท่านั้น ไม่ใช่ด้วยชื่อเต็มแน่นอน นี้
มีประโยชน์สำหรับใช้ในสคริปต์ที่ต้องการเปรียบเทียบชื่อแอพพลิเคชั่นและ
ไลบรารีโดยไม่ขึ้นกับว่าชื่อไดเร็กทอรีของพวกเขาคืออะไร

· --app-debug-info-dir

ตั้งค่าพาธไปยังไดเร็กทอรีภายใต้ข้อมูลการดีบักของแอปพลิเคชัน
น่าจะจัดวาง สิ่งนี้มีประโยชน์สำหรับไบนารีของแอปพลิเคชันที่ debug
ข้อมูลอยู่ในชุดไฟล์แยกต่างหาก

· --lib-debug-info-dir1

กำหนดเส้นทางไปยังไดเร็กทอรีภายใต้ข้อมูลการดีบักของเวอร์ชันแรก
ของห้องสมุดที่ใช้ร่วมกันควรจะจัดวาง สิ่งนี้มีประโยชน์สำหรับไลบรารีที่ใช้ร่วมกัน
ไบนารีที่ข้อมูลการดีบักอยู่ในชุดไฟล์แยกต่างหาก

· --lib-debug-info-dir2

กำหนดเส้นทางไปยังไดเร็กทอรีภายใต้ข้อมูลการดีบักของเวอร์ชันที่สอง
ของห้องสมุดที่ใช้ร่วมกันควรจะจัดวาง สิ่งนี้มีประโยชน์สำหรับไลบรารีที่ใช้ร่วมกัน
ไบนารีที่ข้อมูลการดีบักอยู่ในชุดไฟล์แยกต่างหาก

· --no-แสดง-locs
อย่าแสดงข้อมูลเกี่ยวกับตำแหน่งใน ที่สอง ที่ใช้ร่วมกัน ห้องสมุด ตามลำดับ
เปลี่ยนประเภทแล้ว

· --อ่อนแอโหมด

สิ่งนี้ทำให้เกิดโหมดอ่อนแอของ บิคอมแพต. ในโหมดนี้มีเพียงเวอร์ชันเดียวของ
ห้องสมุดเป็นสิ่งจำเป็น นั่นคือ abicompat ถูกเรียกใช้ดังนี้:

abicompat -- โหมดอ่อนแอ

โปรดทราบว่า --อ่อนแอโหมด สามารถละเว้นตัวเลือกได้หาก . เพียงเวอร์ชันเดียว
ให้ห้องสมุดพร้อมกับแอปพลิเคชัน ในกรณีนั้น, บิคอมแพต อัตโนมัติ
สวิตช์ทำงานในโหมดอ่อนแอ:

abicompat

ในโหมดอ่อนแอนี้ ประเภทของฟังก์ชันและตัวแปรที่ส่งออกโดยไลบรารีและ
ใช้งานโดยแอปพลิเคชัน (เช่นสัญลักษณ์ของฟังก์ชันและตัวแปรเหล่านี้
ไม่ได้กำหนดไว้ในแอปพลิเคชันและถูกกำหนดและส่งออกโดยไลบรารี) เป็น
เมื่อเทียบกับรุ่นของประเภทเหล่านี้ตามที่คาดไว้โดยแอปพลิเคชัน และถ้าสิ่งเหล่านี้
สองรุ่นที่แตกต่างกัน บิคอมแพต บอกผู้ใช้ถึงความแตกต่าง
เป็น

กล่าวอีกนัยหนึ่งในโหมดนี้ บิคอมแพต ตรวจสอบว่าประเภทของฟังก์ชันและ
ตัวแปรที่ส่งออกโดยไลบรารีหมายถึงสิ่งเดียวกับที่แอปพลิเคชัน
คาดหวังเท่าที่ ABI เป็นห่วง

โปรดทราบว่าในโหมดนี้ บิคอมแพต ตรวจไม่พบฟังก์ชันหรือตัวแปรที่ส่งออก
(สัญลักษณ์) ที่แอปพลิเคชันคาดไว้แต่ถูกลบออกจากไลบรารี
จึงเรียกว่า อ่อนแอ โหมด.

กลับ VALUES


รหัสทางออกของ บิคอมแพต คำสั่งเป็น 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 ทดสอบ 0.h
1 โครงสร้าง foo
2 {
3 นิ้ว m0;
4
5 ฟู()
6 : ม0()
7 {}
8 };
9
10 ฟู*
11 first_func();
12
13 โมฆะ
14 วินาที_func(foo&);
15
16 โมฆะ
17 Third_func();
$

$ cat -n ทดสอบ app.cc
1 // รวบรวมด้วย:
2 // g++ -g -Wall -o ทดสอบแอป -L -ltest-0 ทดสอบ app.cc
3
4 #รวม "test0.h"
5
6 นิ้ว
7 หลัก()
8 {
9 foo* f = first_func();
10 วินาที_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 = ใหม่ foo();
10 กลับ f;
11}
12
13 โมฆะ
14 วินาที_func(foo&)
15 {
16}
17
18 โมฆะ
19 Third_func()
20 {
21}
$

$ cat -n ทดสอบ 1.h
1 โครงสร้าง foo
2 {
3 นิ้ว m0;
4 ถ่าน m1; /* <-- มีสมาชิกใหม่เพิ่มเข้ามาแล้ว! */
5
6 ฟู()
7 : m0(),
8 ม.1()
9 {}
10 };
11
12 ฟู*
13 first_func();
14
15 โมฆะ
16 วินาที_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 = ใหม่ foo();
10 กลับ f;
11}
12
13 โมฆะ
14 วินาที_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 แอปทดสอบ -L -ltest-0.so ทดสอบ app.cc

· ตอนนี้ ใช้ บิคอมแพต เพื่อดูว่า libtest-1.so ABI เข้ากันได้กับแอพหรือไม่ด้วยความเคารพ
ถึง ABI ของ libtest-0.so:

$ แอพทดสอบ abicompat libtest-0.so libtest-1.so
ไฟล์ 'test-app' ของ ELF อาจไม่เข้ากันได้กับ ABI กับ 'libtest-1.so' เนื่องจากความแตกต่างกับ '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 --แอปทดสอบโหมดอ่อนแอ libtest-1.so
ฟังก์ชั่นที่กำหนดไว้ในห้องสมุด
'libtest-1.so'
มีประเภทย่อยที่แตกต่างจากแอปพลิเคชันใด
'แอปทดสอบ'
คาดหวัง:

ฟังก์ชั่น foo* first_func():
เปลี่ยนประเภทการส่งคืน:
ชี้ไปที่พิมพ์ 'struct foo':
ขนาดเปลี่ยนจาก 32 เป็น 64 บิต
การแทรกสมาชิกข้อมูล 1 รายการ:
'char foo::m1' ที่ออฟเซ็ต 32 (เป็นบิต)

$

ใช้ abicompat ออนไลน์โดยใช้บริการ onworks.net



โปรแกรมออนไลน์ Linux และ Windows ล่าสุด