Domanda

Mi chiedo come fare una build di rilascio che comprende tutto il necessario file dll in .exe in modo che il programma può essere eseguito su di un mancato sviluppo della macchina, senza bisogno di installare microsoft redistributable sulla macchina di destinazione.

Senza fare questo si ottiene il messaggio di errore di configurazione dell'applicazione non è corretta e reinstallare.

È stato utile?

Soluzione

  1. Scegliere Il Progetto -> Proprietà
  2. Selezionare Configurazione -> Generale
  3. Nella casella per come si dovrebbe link MFC, scegliere di collegamento statico di esso.
  4. Scegli Il Linker -> Input.Sotto Dipendenze Aggiuntive, aggiungere tutte le librerie, hai bisogno di app di collegamento statico in.

Altri suggerimenti

È necessario impostare la libreria di runtime (In C/C++ -> Generazione del Codice per TUTTI i progetti) per il collegamento statico, che si correla al seguente default costruire configurazioni:

  • Multithreading Debug/Release
  • Singolo A Thread Di Debug/Release

In contrasto con la "DLL" versioni di queste librerie.

Anche in questo caso, a seconda delle librerie che si sta utilizzando, potrebbe essere necessario installare un Modulo di fusione/quadro/etc.Dipende se statico LIB versioni delle dipendenze sono disponibili.

Essere consapevoli del fatto che Microsoft non consiglia di collegamento statico runtime nel progetto, come questo gli impedisce di essere serviti da windows update per risolvere critica bug di sicurezza.Ci sono anche potenziali problemi se si sta passando memoria principale .exe e .i file dll, come se ognuno di questi collegamenti statici il runtime si può finire con malloc/free problemi di mancata corrispondenza.

È possibile includere le Dll con la eseguibile, senza la compilazione di loro nel .exe e senza correre il redist strumento - questo è quello che faccio e sembra funzionare bene.

L'unico neo è che è necessario includere il file due volte se si sta distribuendo per una vasta gamma di versioni di Windows - nuovi OSs bisogno di un file nel manifesto-definito directory e vecchi desidera che tutti i file nella directory del programma.

Devi essere alla ricerca di link statico (in contrapposizione a collegamento dinamico)

Io non sono sicuro di come molti di MS file ridistribuibili di collegamento statico in.

Se stai cercando di scoprire quale dll computer di destinazione non è presente quindi utilizzare depends.exe che ha usato per venire con MSDev, ma può anche essere trovato qui.Prova questo su un paio di macchine di destinazione dovrebbe dire che dll è necessario per il pacchetto con la vostra applicazione.

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