Voor zover ik begrijp zijn het bibliotheken, maar wat is het verschil tussen de twee?
Opmerkingen
- Gerelateerd bericht – Wat is ' is het verschil tussen .so, .la en .a bibliotheek bestanden?
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 eenfull 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.