Teknologian jakaminen

Linkkerin toiminta, staattisen linkityksen ja dynaamisen linkityksen ero, dynaamisten linkkikirjastojen luominen ja käyttö

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Linkittäjällä on tärkeä rooli ohjelman kehittämisessä. Se vastaa useiden objektitiedostojen ja kirjastotiedostojen integroimisesta suoritettavaan tiedostoon. Ennen kuin sukeltaamme linkkerin toimintaan, staattisen linkityksen ja dynaamisen linkityksen eroon sekä dynaamisten linkkikirjastojen luomiseen ja käyttämiseen, hahmotellaan ensin linkkerin perustoiminnot.

Miten linkki toimii

Linkkeri Se on työkalu, joka vastaa yhden tai useamman objektitiedoston ja kirjastotiedoston yhdistämisestä suoritettavaksi tiedostoksi. Sen päätoimintoihin kuuluvat:

  1. Symbolien jäsentäminen : Tunnista ja käsittele kaikki symbolit (funktioiden ja muuttujien nimet) ohjelmassa varmistaen, että jokaisella symbolilla on yksilöllinen määritelmä. Symboleille, joihin viitataan mutta joita ei ole määritelty (ulkoiset symbolit), linkkijä etsii määritelmää toimitetusta kirjastosta tai muusta objektitiedostosta.

  2. nollaa : Säädä kunkin moduulin koodi- ja dataosoitteet lopulliseen muistiosoitteeseen. Relocation sisältää osoitteen korjauksen koodissa ja datasegmentin sijainnin säädön sen varmistamiseksi, että kaikki viittaukset osoittavat oikeaan muistipaikkaan.

  3. yhdistä segmentit: Yhdistä samantyyppiset segmentit (kuten koodisegmentit, datasegmentit jne.) eri kohdetiedostoista yhdeksi jatkuvaksi segmentiksi.

  4. käsittelykirjasto : Linkitä ohjelman vaatima kirjastokoodi objektitiedostoon. Linkkeri pystyy käsittelemään kahdentyyppisiä kirjastoja: staattisia kirjastoja ja dynaamisia kirjastoja.

  5. Luo suoritettava tiedosto: Lopullinen tulos on suoritettava tiedosto, joka voidaan suorittaa käyttöjärjestelmässä.

Ero staattisen linkityksen ja dynaamisen linkityksen välillä

Staattinen linkitys jaDynaaminen linkitys Ne ovat linkkerin kaksi toimintatilaa, joilla kullakin on erilaiset ominaisuudet ja käyttöskenaariot.

staattinen linkki
  • konsepti : Staattisessa linkityksessä kirjastokoodi kopioidaan käännöshetkellä ja upotetaan jokaiseen sitä käyttävään suoritettavaan tiedostoon. Tällä tavalla luotu suoritettava tiedosto sisältää kaiken tarvittavan koodin, eikä se ole riippuvainen ulkoisista kirjastotiedostoista.

  • etu

    • Vahva riippumattomuus: Luotu suoritettava tiedosto sisältää kaikki riippuvuudet, eikä se vaadi ylimääräisiä kirjastotiedostoja ajon aikana.
    • Hyvä yhteensopivuus: suoritusaika ei riipu järjestelmään asennetusta kirjastoversiosta, eikä se kohtaa "kirjastoversioristiriitaa".
  • puute

    • Suuri tiedostokoko: Jokainen suoritettava tiedosto sisältää täydellisen kirjastokoodin, mikä lisää tiedostokokoa.
    • Päivitysongelma: Jos kirjasto päivitetään, kaikki kirjastoa käyttävät ohjelmat on käännettävä uudelleen.
  • Staattinen kirjaston laajennus

    • Windows: .lib
    • Unix/Linux: .a
dynaaminen linkki
  • konsepti : Dynaamisessa linkityksessä kirjastokoodi ladataan ajon aikana, eikä sitä ole upotettu suoritettavaan tiedostoon. Suoritettava tiedosto sisältää vain viittauksia kirjastoihin, ja käyttöjärjestelmä lataa kirjastokoodin ajon aikana.

  • etu

    • Pieni tiedostokoko: suoritettava tiedosto ei sisällä kirjastokoodia, vain viittauksia kirjastoon.
    • Helppo päivittää: Kirjastojen päivittäminen ei vaadi ohjelman uudelleenkääntämistä, vain kirjastotiedostojen korvaamista.
    • Korkea muistin tehokkuus: Useat ohjelmat voivat jakaa saman kirjastotiedoston muistiesiintymiä, mikä vähentää muistin käyttöä.
  • puute

    • Vahvat riippuvuudet: Suoritettavan tiedoston on voitava löytää ja ladata oikea versio kirjastotiedostosta, kun se ajetaan.
    • Yhteensopivuusongelmat: Kirjastotiedoston versioiden yhteensopimattomuus voi aiheuttaa ohjelman epäonnistumisen.
  • Dynaaminen kirjaston laajennus

    • Windows: .dll(Dynamic-Link Library)
    • Unix/Linux: .so(Jaettu objekti)

Luo ja käytä dynaamisia linkkikirjastoja

Luo dynaaminen linkkikirjasto

Eri käyttöjärjestelmissä menetelmät luoda dynaamisia linkkikirjastoja ovat hieman erilaisia. Tässä on joitain yleisiä vaiheita ja komentoja:

Luo dynaaminen linkkikirjasto Linuxissa
  1. Kirjoita kirjaston koodi

    Luo C-lähdetiedosto, joka sisältää funktiot, jotka haluamme sijoittaa dynaamiseen kirjastoon.

    // example.cpp
    #include