InglesPransesEspanyol

Ad


OnWorks favicon

abicompat - Online sa Cloud

Patakbuhin ang abicompat sa OnWorks na libreng hosting provider sa Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

Ito ang command na abicompat na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

PROGRAMA:

NAME


abicompat - suriin ang pagiging tugma ng ABI

sinusuri ng abicompat na ang isang application na nagli-link laban sa isang naibahaging library ay nananatili pa rin
ABI compatible sa isang kasunod na bersyon ng library na iyon. Kung ang bagong bersyon ng
Ang library ay nagpapakilala ng isang hindi pagkakatugma ng ABI, pagkatapos ay ipinahihiwatig ng abicompat sa user kung ano ang eksaktong
ang hindi pagkakatugma ay.

INVOKASYON


abicompat [mga opsyon] [ ]

Opsyon


· - Tumulong

Magpakita ng maikling tulong tungkol sa command at exit.

· --bersyon | -v

Ipakita ang bersyon ng programa at lumabas.

· --list-undefined-symbols | -u

Ipakita ang listahan ng mga hindi natukoy na simbolo ng application at lumabas.

· --show-base-mga pangalan | -b

Sa resultang ulat na inilabas ng tool, ginagawa ng opsyong ito ang application at
ang mga aklatan ay tinutukoy lamang ng kanilang mga baseng pangalan; hindi sa buong ganap na pangalan. Ito
maaaring maging kapaki-pakinabang para sa paggamit sa mga script na gustong ihambing ang mga pangalan ng application at
mga aklatan nang hiwalay sa kung ano ang mga pangalan ng kanilang direktoryo.

· --app-debug-info-dir

Itakda ang path sa direktoryo kung saan naroon ang impormasyon sa pag-debug ng application
dapat inilatag. Ito ay kapaki-pakinabang para sa mga binary ng application kung saan ang pag-debug
ang impormasyon ay nasa isang hiwalay na hanay ng mga file.

· --lib-debug-info-dir1

Itakda ang path sa direktoryo kung saan ang impormasyon sa pag-debug ng unang bersyon
ng shared library ay dapat na inilatag. Ito ay kapaki-pakinabang para sa shared library
binary kung saan ang impormasyon sa pag-debug ay nasa isang hiwalay na hanay ng mga file.

· --lib-debug-info-dir2

Itakda ang path sa direktoryo kung saan ang impormasyon sa pag-debug ng pangalawang bersyon
ng shared library ay dapat na inilatag. Ito ay kapaki-pakinabang para sa shared library
binary kung saan ang impormasyon sa pag-debug ay nasa isang hiwalay na hanay ng mga file.

· --no-show-locs
Huwag magpakita ng impormasyon tungkol sa kung saan sa pangalawa Nagbahagi aklatan ang kani-kanilang
binago ang uri.

· --mahina-mode

Nag-trigger ito ng mahinang mode ng abicompat. Sa mode na ito, isang bersyon lamang ng
kailangan ang library. Ibig sabihin, ang abicompat ay hinihingi ng ganito:

abicompat --weak-mode

Tandaan na ang --mahina-mode ang opsyon ay maaari pang tanggalin kung isang bersyon lamang ng
library ay ibinigay, kasama ang application; sa kasong iyon, abicompat awtomatikong
switch para gumana sa mahinang mode:

abicompat

Sa mahinang mode na ito, ang mga uri ng mga function at variable na na-export ng library at
natupok ng application (tulad ng sa, ang mga simbolo ng mga function at variable na ito
ay hindi natukoy sa application at tinukoy at na-export ng library) ay
kumpara sa bersyon ng mga ganitong uri gaya ng inaasahan ng application. At kung ang mga ito
magkaiba ang dalawang bersyon ng mga uri, abicompat nagsasabi sa gumagamit kung ano ang mga pagkakaiba
ay.

Sa madaling salita, sa mode na ito, abicompat sinusuri na ang mga uri ng mga function at
mga variable na na-export ng library ay pareho ang ibig sabihin ng kung ano ang application
inaasahan, hangga't ang ABI ay nababahala.

Tandaan na sa mode na ito, abicompat ay hindi nakakakita ng mga na-export na function o variable
(mga simbolo) na inaasahan ng application ngunit inalis sa library.
Kaya naman ito tinawag mahina mode.

RETURN Mga halaga


Ang exit code ng abicompat Ang command ay alinman sa 0 kung ang ABI ng binaries ay
ang inihambing ay pantay, o hindi zero kung magkaiba ang mga ito o kung ang tool ay nagkaroon ng error.

Sa susunod na kaso, ang exit code ay isang 8-bits-wide bit field kung saan ang bawat bit ay may a
tiyak na kahulugan.

Ang unang bit, ng halaga 1, ay pinangalanan ABIDIFF_ERROR ibig sabihin nagkaroon ng error.

Ang pangalawang bit, ng halaga 2, ay pinangalanan ABIDIFF_USAGE_ERROR ibig sabihin may error sa daan
tinawag ng user ang tool. Maaaring itakda ito, halimbawa, kung ginamit ng user ang tool
na may hindi kilalang command line switch, na may maling numero o argumento, atbp. Kung ang bit na ito ay
itakda, pagkatapos ay ang ABIDIFF_ERROR bit ay dapat na itakda rin.

Ang ikatlong bit, ng halaga 4, pinangalanan ABIDIFF_ABI_CHANGE ibig sabihin ang ABI ng binary being
magkaiba ang pinaghahambing.

Ang ikaapat na bit, na may halagang 8, ay pinangalanan ABIDIFF_ABI_INCOMPATIBLE_CHANGE ibig sabihin ang ABI ng
Ang mga binary na inihambing ay naiiba sa isang hindi tugmang paraan. Kung nakatakda ang bit na ito, ang
ABIDIFF_ABI_CHANGE bit ay dapat na itakda rin. Kung ang ABIDIFF_ABI_CHANGE ay nakatakda at ang
ABIDIFF_INCOMPATIBLE_CHANGE is HINDI set, ibig sabihin, ang mga ABI na inihahambing ay maaaring
o maaaring hindi tugma. Sa kasong iyon, kailangang suriin ng isang tao ang mga pagbabago sa ABI
upang magpasya kung sila ay magkatugma o hindi.

Ang natitirang mga piraso ay hindi ginagamit para sa sandaling ito.

PAGGAMIT HALIMBAWA


· Pag-detect ng posibleng hindi pagkakatugma ng ABI sa isang bagong bersyon ng shared library:

$ pusa -n pagsubok0.h
1 struct foo
2 {
3 int m0;
4
5 foo()
6 : m0()
7 {}
8 };
9
10 foo*
11 first_func();
12
13 walang bisa
14 segundo_func(foo&);
15
16 walang bisa
17 third_func();
$

$ cat -n test-app.cc
1 // Compile gamit ang:
2 // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
3
4 #include "test0.h"
5
6 int
7 pangunahing()
8 {
9 foo* f = first_func();
10 segundo_func(*f);
11 bumalik 0;
12}
$

$ cat -n test0.cc
1 // I-compile ito gamit ang:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include "test0.h"
5
6 foo*
7 first_func()
8 {
9 foo* f = bagong foo();
10 bumalik f;
11}
12
13 walang bisa
14 segundo_func(foo&)
15 {
16}
17
18 walang bisa
19 third_func()
20 {
21}
$

$ pusa -n pagsubok1.h
1 struct foo
2 {
3 int m0;
4 char m1; /* <-- may nadagdag na bagong miyembro dito! */
5
6 foo()
7: m0(),
8 m1()
9 {}
10 };
11
12 foo*
13 first_func();
14
15 walang bisa
16 segundo_func(foo&);
17
18 walang bisa
19 third_func();
$

$ cat -n test1.cc
1 // I-compile ito gamit ang:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include "test1.h"
5
6 foo*
7 first_func()
8 {
9 foo* f = bagong foo();
10 bumalik f;
11}
12
13 walang bisa
14 segundo_func(foo&)
15 {
16}
17
18 /* Magkomento tayo sa kahulugan ng third_func()
19 walang bisa
20 third_func()
21 {
22}
23 */
$

· I-compile ang una at pangalawang bersyon ng mga aklatan: libtest-0.so at
libtest-1.so:

$ g++ -g -Wall -shared -o libtest-0.so test0.cc
$ g++ -g -Wall -shared -o libtest-1.so test1.cc

· I-compile ang application at i-link ito laban sa unang bersyon ng library,
paglikha ng pagsubok-app binary:

$ g++ -g -Wall -o test-app -L. -ltest-0.so test-app.cc

· Ngayon, gamitin abicompat upang makita kung ang libtest-1.so ay tugma sa ABI sa app, nang may paggalang
sa ABI ng libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
Ang ELF file na 'test-app' ay maaaring hindi ABI compatible sa 'libtest-1.so' dahil sa mga pagkakaiba sa 'libtest-0.so' sa ibaba:
Buod ng mga pagbabago sa mga function: 0 Inalis, 2 Binago, 0 Idinagdag na mga function
Buod ng pagbabago ng mga variable: 0 Inalis, 0 Binago, 0 Idinagdag na variable

2 function na may ilang hindi direktang sub-type na pagbabago:

[C]'function foo* first_func()' ay may ilang hindi direktang sub-type na pagbabago:
binago ang uri ng pagbabalik:
sa itinuro upang i-type ang 'struct foo':
nagbago ang laki mula 32 hanggang 64 bits
1 paglalagay ng miyembro ng data:
'char foo::m1', sa offset 32 ​​(sa bits)
[C]'function void second_func(foo&)' ay may ilang hindi direktang sub-type na pagbabago:
Ang parameter 0 ng uri na 'foo&' ay may mga sub-type na pagbabago:
binago ang uri ng reference na 'struct foo', gaya ng iniulat kanina

$

· Ngayon gamitin ang mahinang mode ng abicompat, iyon ay, pagbibigay lamang ng application at ang
bagong bersyon ng library:

$ abicompat --weak-mode test-app libtest-1.so
mga function na tinukoy sa library
'libtest-1.so'
may mga sub-type na iba sa kung anong application
'test-app'
inaasahan:

function foo* first_func():
binago ang uri ng pagbabalik:
sa itinuro upang i-type ang 'struct foo':
nagbago ang laki mula 32 hanggang 64 bits
1 paglalagay ng miyembro ng data:
'char foo::m1', sa offset 32 ​​(sa bits)

$

Gumamit ng abicompat online gamit ang mga serbisyo ng onworks.net


Mga Libreng Server at Workstation

Mag-download ng Windows at Linux apps

Linux command

Ad