Mitä eroa on .a- ja .so-tiedostoilla?

Ymmärtääkseni ne ovat kirjastoja, mutta mikä ero on näiden kahden välillä?

Kommentit

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *