wanneer een C-programma wordt gecompileerd, genereert de compiler objectcode. Na het genereren van de objectcode, roept de compiler ook linker aan. Een van de belangrijkste taken voor linker is het maken van code van de bibliotheek functies (bijvoorbeeld printf(), scanf(), sqrt(), ..etc) beschikbaar voor uw programma. Een linker kan deze taak op twee manieren uitvoeren, door de code van de bibliotheekfunctie te kopiëren naar uw objectcode, of door een aantal regelingen te treffen zodat de volledige code van de bibliotheekfuncties niet wordt gekopieerd, maar beschikbaar wordt gemaakt tijdens het uitvoeren.,

statische Linking en statische bibliotheken is het resultaat van het kopiëren van alle gebruikte bibliotheekfuncties naar het uitvoerbare bestand. Statische koppeling creëert grotere binaire bestanden, en hebben meer ruimte nodig op de schijf en het hoofdgeheugen. Voorbeelden van statische bibliotheken (bibliotheken die statisch zijn gekoppeld) zijn, .a bestanden in Linux en .lib-bestanden in Windows.

stappen om een statische bibliotheek te maken laten ons een statische bibliotheek maken en gebruiken in UNIX of UNIX zoals OS.
1. Maak een C-bestand dat functies in uw bibliotheek bevat.,div>

#include <stdio.h>
void fun(void)
{
printf("fun() called from a static library");
}



We have created only one file for simplicity., We kunnen ook meerdere bestanden maken in de bibliotheek.

2. Het maken van een koptekst bestand voor de bibliotheek

void fun(void);



3. Compileer bibliotheekbestanden.

 gcc -c lib_mylib.c -o lib_mylib.o 

4. Maak statische bibliotheek., Deze stap is om meerdere objectbestanden te bundelen in één statische bibliotheek (zie ar voor details). De uitvoer van deze stap is statische bibliotheek.

 ar rcs lib_mylib.a lib_mylib.o 

5. Nu is onze statische bibliotheek klaar voor gebruik. Op dit punt kunnen we gewoon lib_mylib kopiëren.een andere plek om het te gebruiken. Voor demo doeleinden, laten we houden de bibliotheek in de huidige directory.

laten we een stuurprogramma maken dat de hierboven gemaakte statische bibliotheek gebruikt.
1., Het maken van een C-bestand met de belangrijkste functie

#include "lib_mylib.h"
void main()
{
fun();
}



2., Compileer het driver programma.

gcc -c driver.c -o driver.o

3. Koppel het gecompileerde stuurprogramma aan de statische bibliotheek. Merk op dat-L. wordt gebruikt om aan te geven dat de statische bibliotheek zich in de huidige map bevindt (zie dit voor details van de opties-L en-l).

gcc -o driver driver.o -L. -l_mylib

4. Start het driver programma

./driver fun() called from a static library

Hieronder volgen enkele belangrijke punten over statische bibliotheken.
1. Voor een statische bibliotheek wordt de eigenlijke code uit de bibliotheek gehaald door de linker en gebruikt om het uiteindelijke uitvoerbare bestand te bouwen op het moment dat u uw applicatie compileert/bouwt.,

2. Elk proces krijgt zijn eigen kopie van de code en gegevens. Waar, zoals in het geval van dynamische bibliotheken het alleen code gedeeld, gegevens zijn specifiek voor elk proces. Voor statische bibliotheken geheugen voetafdrukken zijn groter. Bijvoorbeeld, als alle window system tools statisch waren gekoppeld, Enkele tientallen megabytes RAM zou worden verspild voor een typische gebruiker, en de gebruiker zou worden vertraagd door een heleboel paging.

3. Aangezien bibliotheekcode is verbonden tijdens het compileren, heeft het uiteindelijke uitvoerbare bestand geen afhankelijkheden van de bibliotheek tijdens het uitvoeren, d.w.z., geen extra laadkosten in runtime, dit betekent dat u geen kopie van de bibliotheek hoeft mee te nemen die wordt gebruikt en dat u alles onder uw controle hebt en dat er geen afhankelijkheid is.

4. In statische bibliotheken, zodra alles is gebundeld in uw applicatie, hoeft u zich geen zorgen te maken dat de client de juiste bibliotheek (en versie) beschikbaar op hun systeem zal hebben.

5. Een nadeel van statische bibliotheken is, voor elke verandering(up-gradatie) in de statische bibliotheken, moet je het hoofdprogramma elke keer opnieuw compileren.

6., Een groot voordeel van statische bibliotheken de voorkeur zelfs nu “is snelheid”. Er zal geen dynamische querying van symbolen in statische bibliotheken. Veel productielijnsoftware gebruikt zelfs vandaag de dag statische bibliotheken.

dynamisch linken en dynamische bibliotheken dynamisch linken vereist niet dat de code gekopieerd wordt, het wordt gedaan door de naam van de bibliotheek in het binaire bestand te plaatsen. De eigenlijke koppeling gebeurt wanneer het programma wordt uitgevoerd, wanneer zowel het binaire bestand als de bibliotheek in het geheugen zijn. Voorbeelden van dynamische libraries (libraries die tijdens run-time gekoppeld zijn) zijn,. so In Linux en.dll in Windows.,

We zullen binnenkort meer punten behandelen over dynamische bibliotheken en stappen om ze aan te maken.

Dit artikel is samengesteld door Abhijit Saha en beoordeeld door GeeksforGeeks team. Schrijf opmerkingen als u iets verkeerds vindt, of als u meer informatie wilt delen over het hierboven besproken onderwerp.

Attentie lezer! Stop nu niet met leren. Krijg alle belangrijke CS theorie concepten voor SDE interviews met de CS theorie cursus voor een student-vriendelijke prijs en word industrie klaar.

article Tags:
Practice Tags:

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *