abicompat(1): Skillnad mellan sidversioner

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök
m (Admin flyttade sidan ABICOMPAT till abicompat(1))
Ingen redigeringssammanfattning
 
(2 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
== abicompat - Kontrollera binär kompatibilitet mellan två bibliotek ==
= abicompat(1) =
Kommandot `abicompat` används för att kontrollera om två versioner av ett bibliotek är binärt kompatibla.


=== Syntax ===
== NAMN ==
abicompat [ALTERNATIV] LIB1 LIB2
abicompat – kontrollera ABI-kompatibilitet


=== Beskrivning ===
abicompat kontrollerar att ett program som länkar mot ett givet delat bibliotek fortfarande är ABI-kompatibelt med en senare version av detta bibliotek. Om den nya versionen av biblioteket introducerar en ABI-inkompatibilitet, ger abicompat ledtrådar om exakt vad inkompatibiliteten består i.
Kommandot `abicompat` kontrollerar om två versioner av ett bibliotek är binärt kompatibla. Det används för att säkerställa att ändringar i ett bibliotek inte bryter kompatibiliteten med program som använder det.


=== Alternativ ===
== ANROP ==
Kommandot `abicompat` stöder flera alternativ som kan användas för att justera dess beteende:


* -v, --verbose - Visa mer detaljerad information om jämförelsen.
<pre>
* -h, --help - Visa hjälpmeddelande och avsluta.
abicompat [flaggor] [<program> <delat-bibliotek-första-version> <delat-bibliotek-andra-version>]
* -V, --version - Visa versionsinformation och avsluta.
</pre>
* --headers-only - Kontrollera endast kompatibilitet för rubrikfiler.
* --no-namespace - Ignorera namnutrymmen vid jämförelse.
* --skip-internal - Ignorera interna symboler vid jämförelse.
* --demangle - Demangla symboler för läsbarhet.


=== Exempel ===
== FLAGGOR ==
Här är några praktiska exempel som visar hur du kan använda `abicompat`-kommandot:


* För att kontrollera binär kompatibilitet mellan två bibliotek:
'''--help'''
<code>
Visar kort hjälptext om kommandot och avslutar.
abicompat libfoo.so.1.0 libfoo.so.2.0
</code>


* För att visa mer detaljerad information om jämförelsen:
'''--version''', '''-v'''
<code>
Visar programmets versionsinformation och avslutar.
abicompat --verbose libfoo.so.1.0 libfoo.so.2.0
</code>


* För att kontrollera endast rubrikfiler för kompatibilitet:
'''--list-undefined-symbols''', '''-u'''
<code>
Visar en lista över odefinierade symboler i programmet och avslutar.
abicompat --headers-only libfoo.so.1.0 libfoo.so.2.0
</code>


* För att ignorera namnutrymmen vid jämförelse:
'''--show-base-names''', '''-b'''
<code>
I rapporten som genereras gör denna flagga att program och bibliotek refereras med endast sina basnamn istället för fullständiga sökvägar. Detta är användbart i skript där man vill jämföra namn oberoende av katalogstruktur.
abicompat --no-namespace libfoo.so.1.0 libfoo.so.2.0
</code>


=== Skillnader mellan macOS och Linux ===
'''--app-debug-info-dir''', '''--appd''' ''<sökväg>''
Det finns några skillnader att tänka på när man använder `abicompat` på macOS jämfört med Linux:
Anger katalogen där felsökningsinformation för programmet finns. Användbart om debug-info ligger i separata filer.


Tillgänglighet: `abicompat`-kommandot är generellt sett tillgängligt på de flesta Linux-distributioner som en del av GNU Libabigail-projektet. På macOS kan `abicompat` behöva installeras via paketförvaltare som Homebrew.
'''--lib-debug-info-dir1''', '''--libd1''' ''<sökväg>''
Installation: På Linux kan `abicompat` installeras via paketförvaltaren (t.ex. `apt-get install libabigail` på Debian-baserade system). På macOS kan `abicompat` installeras via Homebrew med `brew install libabigail`.
Anger katalogen där debug-info för första biblioteksversionen finns.


Exempel på att installera `abicompat` på macOS med Homebrew:
'''--lib-debug-info-dir2''', '''--libd2''' ''<sökväg>''
Installera Homebrew om det inte redan är installerat:
Anger katalogen där debug-info för andra biblioteksversionen finns.
<code>
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
</code>


Installera `libabigail`:
'''--suppressions''', '''--suppr''' ''<fil>''
<code>
Använder en undertryckningsspecifikation från angiven fil. Kan anges flera gånger.
brew install libabigail
</code>


Det är alltid bra att konsultera `man`-sidan för `abicompat` på din specifika plattform för att se vilka alternativ och funktioner som är tillgängliga och hur de används.
'''--no-show-locs'''
Visa inte var i det andra biblioteket förändringar skett.


=== Felsökning ===
'''--btf'''
Om du får ett felmeddelande när du använder `abicompat`, kontrollera följande:
Extrahera ABI-information från BTF-debugdata om tillgänglig.
 
'''--ctf'''
Extrahera ABI-information från CTF-debugdata om tillgänglig.
 
'''--fail-no-debug-info'''
Gör att programmet misslyckas om ingen debug-information hittas. Utan denna flagga jämförs istället endast ELF-egenskaper.
 
'''--ignore-soname'''
Ignorera skillnader i SONAME vid jämförelse.
 
'''--weak-mode'''
Aktiverar svagt läge. I detta läge behövs endast en biblioteksversion:
 
<pre>
abicompat --weak-mode <program> <bibliotek>
</pre>
 
Om endast ett bibliotek anges aktiveras svagt läge automatiskt:
 
<pre>
abicompat <program> <bibliotek>
</pre>
 
I detta läge jämförs typerna av funktioner och variabler som exporteras av biblioteket och används av programmet. Om typerna skiljer sig rapporteras skillnaderna.
 
Observera att detta läge inte upptäcker symboler som tagits bort från biblioteket, vilket är anledningen till att det kallas "svagt" läge.
 
== RETURVÄRDEN ==
 
Returkoden är:
 
* '''0''' om ABI är identisk
* '''icke-noll''' om den skiljer sig eller om fel uppstått
 
Returkoden är ett 8-bitars bitfält:
 
'''1 (ABIDIFF_ERROR)'''
Ett fel har inträffat.
 
'''2 (ABIDIFF_USAGE_ERROR)'''
Felaktig användning av kommandot. Denna bit innebär alltid att bit 1 också är satt.
 
'''4 (ABIDIFF_ABI_CHANGE)'''
ABI skiljer sig mellan jämförda binärer.
 
'''8 (ABIDIFF_ABI_INCOMPATIBLE_CHANGE)'''
ABI skiljer sig på ett inkompatibelt sätt. Denna bit innebär alltid att bit 4 också är satt.
 
Om bit 4 är satt men inte bit 8 krävs manuell granskning för att avgöra kompatibilitet.
 
Övriga bitar används inte för närvarande.
 
== ANVÄNDNINGSEXEMPEL ==
 
=== Upptäcka ABI-inkompatibilitet ===
 
<pre>
$ cat -n test0.h
    1  struct foo
    2  {
    3    int m0;
    4
    5    foo()
    6      : m0()
    7    {}
    8  };
</pre>
 
<pre>
$ cat -n test-app.cc
    1  // Kompilera med:
    2  // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
</pre>
 
<pre>
$ cat -n test1.h
    1  struct foo
    2  {
    3    int  m0;
    4    char m1; /* ny medlem tillagd */
</pre>
 
=== Kompilering ===
 
<pre>
g++ -g -Wall -shared -o libtest-0.so test0.cc
g++ -g -Wall -shared -o libtest-1.so test1.cc
</pre>
 
<pre>
g++ -g -Wall -o test-app -L. -ltest-0.so test-app.cc
</pre>
 
=== Jämförelse ===
 
<pre>
abicompat test-app libtest-0.so libtest-1.so
</pre>
 
Exempel på resultat:
 
<pre>
Functions changes summary: 0 Removed, 2 Changed, 0 Added
Variables changes summary: 0 Removed, 0 Changed, 0 Added
</pre>
 
=== Svagt läge ===
 
<pre>
abicompat --weak-mode test-app libtest-1.so
</pre>
 
== FÖRFATTARE ==
Dodji Seketeli
 
== COPYRIGHT ==
2014–2025, Red Hat, Inc.
 
== KOLOFON ==
Denna manualsida är en del av projektet libabigail (ABI Generic Analysis and Instrumentation Library).
 
Projektets webbplats:
[https://sourceware.org/libabigail/](https://sourceware.org/libabigail/)
 
Felrapportering:
[http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail](http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail)
 
Manualsidan hämtades från projektets Git-repository den 16 januari 2026.
 
== SE ÄVEN ==
 
[[abidiff(1)]], [[abipkgdiff(1)]], [[abidw(1)]], [[abilint(1)]], [[readelf(1)]], [[nm(1)]], [[ldd(1)]]
 
Detta avsnitt länkar till relaterade verktyg för analys av ABI, ELF-binärer och symboler.


* Att du använder rätt syntax och alternativ för ditt specifika kommando.
* Att biblioteken du försöker jämföra existerar och är tillgängliga.
* Att du har nödvändiga behörigheter för att läsa biblioteken.


=== Se även ===
* [[abi-dumper]] - Dumpera ABI-information från en delad objektfil.
* [[abi-compliance-checker]] - Kontrollera ABI-kompatibilitet mellan olika versioner av bibliotek.
* [[nm]] - Visa symboltabellen för objektfiler.


=== Källor ===
=== Källor ===
Rad 79: Rad 186:
= Sidslut =
= Sidslut =


Det här är en maskinöversättning av linux kommando manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på  
Orginalhemsidan på Engelska : https://man7.org/linux/man-pages/man1/abicompat.1.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på  
https://www.linux.se/kontaka-linux-se/
https://www.linux.se/kontaka-linux-se/
<BR><BR>Tack till [https://datorhjalp.se Datorhjälp i Stockholm] som har sponsrat [https://linux.se Linux.se] med webserver.
<BR><BR>Tack till [https://datorhjalp.se Datorhjälp] som har sponsrat [https://www.linux.se Linux.se] med webbhotell.


[[Kategori:Linuxkommandon]]
[[Kategori:Linuxmanual grupp 1]]
[[Kategori:Linuxmanual]]

Nuvarande version från 28 mars 2026 kl. 11.22

abicompat(1)

NAMN

abicompat – kontrollera ABI-kompatibilitet

abicompat kontrollerar att ett program som länkar mot ett givet delat bibliotek fortfarande är ABI-kompatibelt med en senare version av detta bibliotek. Om den nya versionen av biblioteket introducerar en ABI-inkompatibilitet, ger abicompat ledtrådar om exakt vad inkompatibiliteten består i.

ANROP

abicompat [flaggor] [<program> <delat-bibliotek-första-version> <delat-bibliotek-andra-version>]

FLAGGOR

--help Visar kort hjälptext om kommandot och avslutar.

--version, -v Visar programmets versionsinformation och avslutar.

--list-undefined-symbols, -u Visar en lista över odefinierade symboler i programmet och avslutar.

--show-base-names, -b I rapporten som genereras gör denna flagga att program och bibliotek refereras med endast sina basnamn istället för fullständiga sökvägar. Detta är användbart i skript där man vill jämföra namn oberoende av katalogstruktur.

--app-debug-info-dir, --appd <sökväg> Anger katalogen där felsökningsinformation för programmet finns. Användbart om debug-info ligger i separata filer.

--lib-debug-info-dir1, --libd1 <sökväg> Anger katalogen där debug-info för första biblioteksversionen finns.

--lib-debug-info-dir2, --libd2 <sökväg> Anger katalogen där debug-info för andra biblioteksversionen finns.

--suppressions, --suppr <fil> Använder en undertryckningsspecifikation från angiven fil. Kan anges flera gånger.

--no-show-locs Visa inte var i det andra biblioteket förändringar skett.

--btf Extrahera ABI-information från BTF-debugdata om tillgänglig.

--ctf Extrahera ABI-information från CTF-debugdata om tillgänglig.

--fail-no-debug-info Gör att programmet misslyckas om ingen debug-information hittas. Utan denna flagga jämförs istället endast ELF-egenskaper.

--ignore-soname Ignorera skillnader i SONAME vid jämförelse.

--weak-mode Aktiverar svagt läge. I detta läge behövs endast en biblioteksversion:

abicompat --weak-mode <program> <bibliotek>

Om endast ett bibliotek anges aktiveras svagt läge automatiskt:

abicompat <program> <bibliotek>

I detta läge jämförs typerna av funktioner och variabler som exporteras av biblioteket och används av programmet. Om typerna skiljer sig rapporteras skillnaderna.

Observera att detta läge inte upptäcker symboler som tagits bort från biblioteket, vilket är anledningen till att det kallas "svagt" läge.

RETURVÄRDEN

Returkoden är:

  • 0 om ABI är identisk
  • icke-noll om den skiljer sig eller om fel uppstått

Returkoden är ett 8-bitars bitfält:

1 (ABIDIFF_ERROR) Ett fel har inträffat.

2 (ABIDIFF_USAGE_ERROR) Felaktig användning av kommandot. Denna bit innebär alltid att bit 1 också är satt.

4 (ABIDIFF_ABI_CHANGE) ABI skiljer sig mellan jämförda binärer.

8 (ABIDIFF_ABI_INCOMPATIBLE_CHANGE) ABI skiljer sig på ett inkompatibelt sätt. Denna bit innebär alltid att bit 4 också är satt.

Om bit 4 är satt men inte bit 8 krävs manuell granskning för att avgöra kompatibilitet.

Övriga bitar används inte för närvarande.

ANVÄNDNINGSEXEMPEL

Upptäcka ABI-inkompatibilitet

$ cat -n test0.h
     1  struct foo
     2  {
     3    int m0;
     4
     5    foo()
     6      : m0()
     7    {}
     8  };
$ cat -n test-app.cc
     1  // Kompilera med:
     2  // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
$ cat -n test1.h
     1  struct foo
     2  {
     3    int  m0;
     4    char m1; /* ny medlem tillagd */

Kompilering

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

Jämförelse

abicompat test-app libtest-0.so libtest-1.so

Exempel på resultat:

Functions changes summary: 0 Removed, 2 Changed, 0 Added
Variables changes summary: 0 Removed, 0 Changed, 0 Added

Svagt läge

abicompat --weak-mode test-app libtest-1.so

FÖRFATTARE

Dodji Seketeli

COPYRIGHT

2014–2025, Red Hat, Inc.

KOLOFON

Denna manualsida är en del av projektet libabigail (ABI Generic Analysis and Instrumentation Library).

Projektets webbplats: [1](https://sourceware.org/libabigail/)

Felrapportering: [2](http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail)

Manualsidan hämtades från projektets Git-repository den 16 januari 2026.

SE ÄVEN

abidiff(1), abipkgdiff(1), abidw(1), abilint(1), readelf(1), nm(1), ldd(1)

Detta avsnitt länkar till relaterade verktyg för analys av ABI, ELF-binärer och symboler.


Källor

Sidslut

Orginalhemsidan på Engelska : https://man7.org/linux/man-pages/man1/abicompat.1.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.