Wat is het verschil tussen .a- en .so-bestanden?

Voor zover ik begrijp zijn het bibliotheken, maar wat is het verschil tussen de twee?

Opmerkingen

Antwoord

A .a -bestand is een statische bibliotheek, terwijl een .so -bestand een gedeelde object (dynamische) bibliotheek is, vergelijkbaar met een DLL in Windows. Er is wat gedetailleerde informatie over de verschillen tussen de twee op deze pagina .

Reacties

  • .a kunnen alleen worden opgenomen als onderdeel van een programma tijdens het compileren. .so ' s kunnen " worden geïmporteerd " terwijl een programma wordt geladen.
  • waar staat .a voor?
  • @hfrmobile De a staat voor archive – een statische bibliotheek is een verzameling objectbestanden gemaakt met het ar hulpprogramma. Meer info hier

Answer

Als vervolg hierop is een .a-bestand een “ar” -archief. In tegenstelling tot een tar-archief slaat het .o of object op bestanden, waardoor ze onder andere uit het archief kunnen worden gehaald en aan een programma kunnen worden gekoppeld. U kunt ar gebruiken om andere bestanden op te slaan als u dat wilt. / p>

Je kunt een lijst krijgen van de leden van een ar-bestand met de parameter -t, bijvoorbeeld:

ar -t /usr/lib/libc.a 

Een .so-bestand is een “gedeeld object” -bestand, en heeft veel meer informatie beschikbaar voor de linker zodat leden zo snel mogelijk kunnen worden gekoppeld aan een laadprogramma.

Probeer bijvoorbeeld:

objdump -T /lib/libc-2.11.1.so 

(of welke versie van libc.so je ook hebt in je / lib-directory.) Merk op dat een .so-bestand ook gewoon een linkerscript kan bevatten dat het naar het bestand ergens anders, of gebruik iets anders.

Interessant is dat een .so-bestand ook een volwaardig programma kan zijn. Probeer bijvoorbeeld /lib/libc.so.6 uit te voeren. (Helaas lijkt dit laatste deel “niet te werken op modernere systemen. Niet dat het” een groot verlies is.)

Opmerkingen

  • Typefout . je bedoelt ar -t /usr/lib/libc.a te schrijven. In feite lijkt de - ' t niet nodig te zijn in dit geval. Ook drukt /lib/libc.so.6. alleen wat uitvoer af. Ik weet niet ' of ik het een full fledged program zou noemen.
  • Het ' is een volwaardig programma in de zin dat het een hoofdsymbool heeft dat door exec kan worden gevonden.
  • Je kunt ook ldd op .so ' s, en het zal je laten zien welke andere bibliotheken het gebruikt. Static keert terug met een bericht dat het ' is en geen dynamische bibliotheek.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *