Ymmärtääkseni ne ovat kirjastoja, mutta mikä ero on näiden kahden välillä?
Kommentit
- Liittyvä viesti – Mikä ' on ero .so-, .la- ja .a-kirjastojen välillä tiedostot?
Vastaa
A .a
tiedosto on staattinen kirjasto, kun taas .so
-tiedosto on jaettu objekti (dynaaminen) kirjasto, joka on samanlainen kuin Windowsin DLL. Siellä on joitain yksityiskohtaisia tietoja näiden kahden välillä olevista eroista tällä sivulla .
Kommentit
-
.a
voidaan sisällyttää vain osana ohjelmaa kääntämisen aikana..so
' s voidaan " tuoda " kun ohjelma latautuu. - mitä .a tarkoittaa?
- @hfrmobile A tarkoittaa arkistoa – staattinen kirjasto on kokoelma objektitiedostoja, jotka on luotu
ar
-apuohjelmalla. Lisätietoja täältä
vastaus
Seuraavaksi .a-tiedosto on ”ar” -arkisto. Toisin kuin tar-arkisto, se tallentaa .o tai objektin tiedostoja, jolloin ne voidaan vetää ulos arkistosta ja linkittää ohjelmaan. Voit halutessasi tallentaa muita tiedostoja ar avulla. / p>
Voit saada luettelon ar-tiedoston jäsenistä -t-parametrilla, esimerkiksi:
ar -t /usr/lib/libc.a
.so-tiedosto on ”jaettu objekti” -tiedosto, ja linkittimen käytettävissä on paljon enemmän tietoja, jotta jäsenet voidaan linkittää latausohjelmaan mahdollisimman nopeasti.
Yritä esimerkiksi:
objdump -T /lib/libc-2.11.1.so
(tai mikä tahansa libc.so-versio, joka sinulla on / lib -hakemistossa.) Huomaa, että .so-tiedosto voi myös sisältää vain linkkikomennon, joka ohjaa sitä etsimään tiedosto muualla tai käytä jotain muuta.
Mielenkiintoista on, että .so-tiedosto voi olla myös täysimittainen ohjelma. Esimerkiksi kokeilemalla /lib/libc.so.6 . (Valitettavasti tämä viimeinen osa ei näytä toimivan nykyaikaisemmissa järjestelmissä. Ei, että se on suuri menetys.)
Kommentit
- Kirjoitusvirhe . tarkoitat kirjoittaa
ar -t /usr/lib/libc.a
. Itse asiassa-
ei ' näytä olevan tarpeen tässä tapauksessa. Myös/lib/libc.so.6.
tulostaa vain osan. En tiedä ' ei, kutsuttaisin sitä nimelläfull fledged program
. - Se ' on täysimittainen ohjelma siinä mielessä, että sillä on pääsymboli, jonka exec löytää.
- Voit myös suorittaa
ldd
-palvelun .so ' s, ja se näyttää, mitä muita kirjastoja se käyttää. Staattinen palaa viestillä, jossa sanotaan, että ' ei ole dynaaminen kirjasto.