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.
Linkkeri Se on työkalu, joka vastaa yhden tai useamman objektitiedoston ja kirjastotiedoston yhdistämisestä suoritettavaksi tiedostoksi. Sen päätoimintoihin kuuluvat:
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.
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.
yhdistä segmentit: Yhdistä samantyyppiset segmentit (kuten koodisegmentit, datasegmentit jne.) eri kohdetiedostoista yhdeksi jatkuvaksi segmentiksi.
käsittelykirjasto : Linkitä ohjelman vaatima kirjastokoodi objektitiedostoon. Linkkeri pystyy käsittelemään kahdentyyppisiä kirjastoja: staattisia kirjastoja ja dynaamisia kirjastoja.
Luo suoritettava tiedosto: Lopullinen tulos on suoritettava tiedosto, joka voidaan suorittaa käyttöjärjestelmässä.
Staattinen linkitys jaDynaaminen linkitys Ne ovat linkkerin kaksi toimintatilaa, joilla kullakin on erilaiset ominaisuudet ja käyttöskenaariot.
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:
puute:
Staattinen kirjaston laajennus:
.lib
.a
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:
puute:
Dynaaminen kirjaston laajennus:
.dll
(Dynamic-Link Library).so
(Jaettu objekti)Eri käyttöjärjestelmissä menetelmät luoda dynaamisia linkkikirjastoja ovat hieman erilaisia. Tässä on joitain yleisiä vaiheita ja komentoja:
Kirjoita kirjaston koodi:
Luo C-lähdetiedosto, joka sisältää funktiot, jotka haluamme sijoittaa dynaamiseen kirjastoon.
// example.cpp
#include