2016-05-18 45 views
5

Sto pianificando di rilasciare e distribuire un'applicazione, scritta in C++ e wxWidgets. La libreria wxWidgets è disponibile come DLL e come libreria statica. Pertanto, ho la possibilità di distribuire l'applicazione come applicazione dinamica o come build statica.Qual è la procedura migliore per la distribuzione di un'applicazione come statica o dinamica?

Attualmente, preferisco l'opzione statico-build, perché:

  • l'eseguibile non è troppo grande (< 20 MegaByte).
  • non ci sono dipendenze da considerare.
  • non è richiesta l'installazione.

Domanda

mi sono perso qualcosa di molto importante?

risposta

3

Il mio suggerimento sarebbe di andare per collegamento statico. I miei due centesimi su vantaggio:

  • Lei non dipendono da WX set di strumenti in fase di installazione in loco del cliente, né è necessario dare in bundle con il vostro installatore, non come installer standalone come un prerequisito .
  • Non ti aspetti né chiedi al cliente di eseguire l'installazione WX (o anche la distribuzione XCOPY). Il cliente non si preoccuperà!
  • 20 MB è piuttosto piccolo in TB di mondo e buoni MB di velocità di Internet.
  • Non si ottengono bug di comportamento imprevisti da parte del cliente, se capita di utilizzare la versione superiore/inferiore della libreria.
  • Si può essere certi che l'applicazione funzionerà nello stesso modo testato nell'ambiente (principalmente)
  • È possibile continuare a utilizzare la versione X di WX, anche se esce una versione X + 1 piena di buggy/vistosa. Non vuoi permettere ai clienti di avere una versione "nuova e raffinata" della libreria, che interrompe la tua app!
1

Mentre nel tuo caso l'eseguibile non è molto grande, può diventare estremamente grande se si collega tutto staticamente. Utilizza anche più memoria, poiché l'eseguibile più grande deve essere caricato in memoria.

Se si utilizza una libreria dinamica, il sistema operativo può "condividere" la memoria di sola lettura tra i processi, riducendo i requisiti di memoria.

L'aggiornamento dell'applicazione può anche essere più semplice con una libreria dinamica, poiché piuttosto che dover aggiornare l'intero eseguibile è sufficiente passare dalla libreria dinamica (presupponendo che l'interfaccia sia la stessa) e voilà! Lo stesso vale se l'utente desidera aggiornare la propria libreria dinamica (ad esempio, tramite un gestore di pacchetti).

4

È necessario utilizzare il collegamento dinamico quando c'è un buon motivo per usarlo e il collegamento statico in caso contrario. Alcuni buoni motivi per utilizzare il collegamento dinamico sono:

  1. si sta distribuendo i binari per un sistema che ha già o, può avere, le librerie wxWidgets come ad esempio un certo numero di distribuzioni Linux, OS X (con Homebrew) ecc In In questo caso è fortemente preferibile riutilizzare le librerie di sistema esistenti piuttosto che usare quelle personali.
  2. Si dispone di diversi moduli che utilizzano wxWidgets: lo spazio risparmiato dall'utilizzo del collegamento dinamico può essere piuttosto significativo qui.
  3. Si utilizza wxWidgets da una DLL in MSW: in questo caso lo stesso wxWidgets deve essere collegato come una DLL, altrimenti si rischia di avere problemi se più di un'istanza di wxWidgets viene caricata nello spazio di indirizzamento del processo.
  4. Si pianifica di aggiornare l'installazione dell'applicazione tramite la rete: in questo caso può essere utile aggiornare solo una singola DLL anziché un'intera applicazione monolitica.

Se nessuno di questi motivi si applica, ad es. vuoi solo distribuire un singolo programma sotto MSW, il collegamento statico è più semplice e preferibile.

Una nota correlata: se si finisce distribuendo le DLL wxWidgets, si consideri l'utilizzo di un suffisso unico per loro invece di "personalizzato" usato di default, questo ridurrà le possibilità di confusione tra le DLL e qualche altra versione di wx.