Come imballate un progetto c ++ di Visual Studio per il rilascio?

Mi chiedo come realizzare una versione di rilascio che includa tutti i file dll necessari nell’exe, in modo che il programma possa essere eseguito su un computer non di sviluppo senza dover installare il microsoft ridistribuibile sul computer di destinazione.

Senza fare ciò si ottiene il messaggio di errore che la configurazione dell’applicazione non è corretta e da reinstallare.

  1. Scegli Progetto -> Proprietà
  2. Seleziona Configurazione -> Generale
  3. Nella casella relativa al modo in cui colbind MFC, scegliere di collegarlo staticamente.
  4. Scegli Linker -> Input. In Dipendenze aggiuntive , aggiungi le librerie necessarie per colbind in modo statico la tua app.

È necessario impostare la libreria run-time (in C / C ++ -> Generazione codice) per TUTTI i progetti sul collegamento statico, che si correla alle seguenti configurazioni predefinite di costruzione:

  • Debug / rilascio multithread
  • Debug / Release di Singlethreaded

Al contrario delle versioni “DLL” di quelle librerie.

Anche se lo fai, a seconda delle librerie che stai usando, potresti dover installare un Merge Module / framework / etc. Dipende se sono disponibili versioni LIB statiche delle tue dipendenze.

Si tenga presente che Microsoft non consiglia il collegamento statico del runtime al progetto , in quanto ciò impedisce che venga aggiornato da Windows Update per correggere i bug di sicurezza critici. Ci sono anche potenziali problemi se passi la memoria tra i tuoi file .exe e .dll principali, come se ognuno di questi collegamenti statici sul runtime ti portasse a termine con problemi di mismatch malloc / free.

È ansible includere le DLL con l’eseguibile, senza doverle compilare nell’exe e senza eseguire lo strumento di redist: questo è quello che faccio e sembra funzionare correttamente.

L’unico neo è che devi includere i file due volte se stai distribuendo per una vasta gamma di versioni di Windows – i nuovi SO richiedono i file nelle directory manifest-definite, e quelli più vecchi vogliono tutti i file nella directory del programma .

Saresti interessato al collegamento statico (al contrario del collegamento dinamico)

Non sono sicuro di quanti dei redistributables MS collegano staticamente.

Se stai cercando di scoprire quale dll è la tua macchina di destinazione, allora usa depends.exe che veniva con MSDev, ma può anche essere trovata qui . Testare questo su alcuni computer di destinazione dovrebbe dirvi quale DLL è necessario per il pacchetto con l’applicazione.