Domanda

Voglio rilasciare un'applicazione che ho sviluppato come hobby sia per Linux che per Windows. Questa applicazione dipende da Boost (e possibilmente da altre librerie). La norma per questo tipo di applicazione (un motore a scacchi) è quella di fornire solo un file eseguibile e possibilmente alcuni file di supporto.

Sono duro che sarebbe una buona idea collegare staticamente le librerie in modo che l'eseguibile non abbia alcuna dipendenza. Quindi l'utente finale può semplicemente mettere l'eseguibile in una directory e iniziare a usarlo.

Tuttavia, mentre facevo alcune ricerche online ho trovato alcuni commenti negativi sul collegamento staticamente delle librerie, alcuni persino sostenendo che un'applicazione con librerie staticamente collegate sarebbe quasi portatile, il che significa che avrebbe funzionato solo sul mio sistema di sistemi altamente simili.

Allora quali sono i pro e i contro della libreria di collegamento staticamente?

So già che l'eseguibile sarà più grande. Ma non riesco a capire perché renderebbe la mia applicazione meno portatile.

È stato utile?

Soluzione

Professionisti:
Nessuna dipendenza.

Contro:
Utilizzo di memoria più elevata, poiché il sistema operativo non può più utilizzare una copia condivisa della libreria.
Se la libreria deve essere aggiornata, l'applicazione deve essere ricostruita. Questo è doppiamente importante per le biblioteche che hanno quindi correzioni di sicurezza.

Naturalmente, un problema più grande per la portabilità è la mancanza di distribuzione del codice sorgente.

Altri suggerimenti

Diciamo che la libreria statica "A" che includi ha una dipendenza dalla funzione "B". Se questa dipendenza non può essere soddisfatta dal sistema di destinazione, il programma non verrà eseguito.

Ma se stai utilizzando il collegamento dinamico, l'utente potrebbe forse installare un'altra versione della libreria "A" che utilizza la funzione "C" anziché "B", quindi può funzionare correttamente.

Se colleghi staticamente le librerie, a meno che tu non aggiunga Smart per controllare anche il sistema dell'utente per le librerie che hai collegato, stai bloccando l'applicazione per utilizzare quelle versioni delle librerie fino a quando non si aggiorna l'eseguibile. Si verificano buchi di sicurezza e si verificano aggiornamenti. (Per un motore a scacchi potrebbe non esserci troppo problema, ma chissà.)

With dynamically linked libraries, if the library say X, you have linked with is not available at the user system, your code crashes ungracefully leaving the end user wondering.
Whereas, in the case of static libraries everything is fused into the executable, so a condition like above mayn't happen, the executable however will be very bulky.

The above problem in dynamically linked libraries can however, be eliminated by dynamic loading.

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