Domanda

Lo so molto poco di DLL e LIB di diverso da quello che essi contengono codice vitale necessario per un programma da eseguire correttamente - le biblioteche. Ma perché i compilatori a generare a tutti? Non sarebbe più facile da includere solo tutto il codice in un unico file eseguibile? E qual è la differenza tra DLL e LIB di?

È stato utile?

Soluzione

Ci sono le librerie statiche (lib) e le librerie dinamiche (DLL).

Le biblioteche sono utilizzati perché si può avere il codice che si desidera utilizzare in molti programmi. Per esempio se si scrive una funzione che conta il numero di caratteri di una stringa, questa funzione sarà utile in un sacco di programmi. Una volta che si ottiene che la funzione lavora correttamente non si vuole avere a ricompilare il codice ogni volta che lo si utilizza, in modo da inserire il codice eseguibile per quella funzione in una libreria, e il linker possibile estrarre e inserire il codice compilato nel vostro programma . Le librerie statiche sono a volte chiamati 'archivi' per questo motivo.

librerie dinamiche prendono questo un ulteriore passo avanti. Sembra uno spreco avere più copie delle funzioni di libreria occupare spazio in ciascuno dei programmi. Perché non è possibile tutti condividono una copia della funzione? Questo è ciò che le librerie dinamiche sono per. Piuttosto che costruire il codice della libreria nel vostro programma quando viene compilato, può essere gestito da mappatura è nel vostro programma in quanto è caricato in memoria. più programmi in esecuzione allo stesso tempo che utilizzano le stesse funzioni possono condividono una copia, il risparmio di memoria. In realtà, è possibile caricare le librerie dinamiche solo se necessario, a seconda del percorso attraverso il codice. Non ha senso avere le routine di stampa che occupano memoria se non si sta facendo qualsiasi stampa. D'altra parte, questo significa che avere una copia della libreria dinamica installato su ogni macchina il programma viene eseguito su. Questo crea una propria serie di problemi.

Per fare un esempio, quasi ogni programma scritto in 'C' avrà bisogno di funzioni da una libreria chiamata la 'libreria di runtime C, anche se alcuni programmi avranno bisogno di tutte le funzioni. Il runtime C è disponibile in versioni sia statiche che dinamiche, in modo da poter determinare quale versione il programma utilizza a seconda delle specifiche esigenze.

Altri suggerimenti

Un altro aspetto è la sicurezza (offuscamento). Una volta che una porzione di codice viene estratto dal principale e messo in una "separati" libreria di collegamento dinamico, è più facile da attaccare, analizzare (decodificare) il codice, poiché è stato isolato. Quando lo stesso pezzo di codice è conservato in una libreria LIB, è parte della compilato (linked) applicazione di destinazione, e questo quindi più difficile da isolare (differenziare), che pezzo di codice dal resto dei file binari di destinazione.

Una ragione importante per la creazione di una DLL / LIB piuttosto che compilare il codice in un file eseguibile è il riutilizzo e la delocalizzazione. Il Java media o l'applicazione .NET (per esempio) è molto probabile che utilizzare più 3rd party (o quadro) librerie. È molto più facile e più veloce per compilare solo contro una libreria di pre-costruito, piuttosto che dover compilare tutto il codice 3rd party nella vostra applicazione. Compilare il codice in librerie incoraggia inoltre le buone pratiche di progettazione, ad esempio, progettare le vostre classi da utilizzare in diversi tipi di applicazioni.

Una DLL è una libreria di funzioni che sono condivisi tra gli altri programmi eseguibili. Basta guardare nella directory di Windows / system32 e troverete decine di loro. Quando il programma crea una DLL anche normalmente crea un file lib in modo che l'applicazione * .exe programma può risolvere i simboli che vengono dichiarati nella DLL.

Un Lib è una libreria di funzioni che sono staticamente collegati a un programma - che non sono condivise da altri programmi. Ogni programma che si collega con un file * lib ha tutto il codice in quel file. Se si dispone di due programmi a.exe e b.exe che collegano con C.lib allora ogni A e B saranno entrambi contengono il codice C.lib.

Come si crea DLL e librerie dipendono dal compilatore utilizzato. Ogni compilatore fa in modo diverso.

Un altra differenza sta nelle prestazioni.

Poiché la DLL viene caricato durante l'esecuzione del exe (s), l'exe (s) e il lavoro DLL con il concetto di memoria condivisa e quindi le prestazioni è bassa relativamente al collegamento statico.

D'altra parte, un lib è il codice che è collegata in modo statico al momento della compilazione in ogni processo che richiede. Da qui l'exe (s) avrà memoria singola, aumentando così le prestazioni del processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top