ภาษาอังกฤษภาษาฝรั่งเศสสเปน

Ad


ไอคอน Fav ของ 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

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

· --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


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

คำสั่ง Linux

Ad