Come posso creare un file .exe completamente collegato staticamente con Visual Studio Express 2005?

StackOverflow https://stackoverflow.com/questions/37398

  •  09-06-2019
  •  | 
  •  

Domanda

Il mio attuale ambiente C++ preferito è l'edizione gratuita e ampiamente eccellente di Microsoft Visual Studio 2005 Express.Di tanto in tanto ho inviato file release .exe ad altre persone con risultati soddisfacenti.Tuttavia recentemente ho fatto la scoperta inquietante che i risultati soddisfacenti erano basati su più fortuna di quella che avrei desiderato.Il tentativo di eseguire uno di questi programmi su un vecchio XP (annata 2001, non scrupolosamente aggiornato) non mi ha dato altro che un brutto messaggio "Il sistema non può eseguire x.exe" (o simile).

Alcune ricerche su Google hanno rivelato che con questo set di strumenti, anche specificando il collegamento statico si ottiene un semplice hello-world.exe che in realtà si basa su file .dll aggiuntivi (msvcm80.dll ecc.).Un sistema di pianificazione delle versioni incredibilmente elaborato (qualcuno ha file manifest?) non consentirà l'esecuzione del file .exe senza le versioni .dll esattamente corrette.Non voglio né ho bisogno di queste cose, voglio solo un file .exe vecchio stile che non faccia altro che operazioni Win32 con il minimo comune denominatore e funzioni su qualsiasi vecchio sistema operativo Win32.

Qualcuno sa se è possibile fare quello che voglio fare con il mio set di strumenti esistente?

Grazie.

È stato utile?

Soluzione

Per il runtime C vai alle impostazioni del progetto, scegli C/C++ quindi "Generazione codice".Modificare l'impostazione della "libreria runtime" su "multithread" anziché su "dll multithread".

Se stai utilizzando altre librerie potresti dover dire al linker di ignorare esplicitamente il CRT collegato dinamicamente.

Altri suggerimenti

La mia esperienza in Visual Studio 2010 è che sono necessarie due modifiche per non aver bisogno delle DLL.Dalla pagina delle proprietà del progetto (fare clic con il pulsante destro del mouse sul nome del progetto nella finestra Esplora soluzioni):

  1. In Proprietà di configurazione --> Generale, modifica il campo "Utilizzo di MFC" in "Utilizza MFC in una libreria statica".

  2. In Proprietà di configurazione --> C/C++ --> Generazione codice, modifica il campo "Libreria di runtime" in "Multi-thread (/MT)"

Non sono sicuro del motivo per cui fossero necessari entrambi.L'ho usato per rimuovere una dipendenza da glut32.dll.

Aggiunto successivamente:Quando apporti queste modifiche alle configurazioni, dovresti apportarle a "Tutte le configurazioni" --- puoi selezionarlo nella parte superiore della finestra Proprietà.Se apporti la modifica solo alla configurazione Debug, non verrà applicata alla configurazione Release e viceversa.

Ho avuto questo stesso problema di dipendenza e so anche che puoi includere le DLL VS 8.0 (solo versione!non eseguire il debug! --- e anche il tuo programma deve essere rilasciato) in una cartella con il nome appropriato, nella cartella principale con il tuo .exe:

Come:Distribuire utilizzando XCopy (MSDN)

Tieni inoltre presente che le cose andranno sicuramente male se hai bisogno di avere codice C++ e C nello stesso file .exe collegato staticamente perché otterrai conflitti tra linker che possono essere risolti solo ignorando il file libXXX.lib corretto e quindi collegando dinamicamente (DLL) .

Infine, con un set di strumenti diverso (VC++ 6.0) le cose "funzionano e basta", poiché Windows 2000 e versioni successive hanno installate le DLL corrette.

Per quanto riguarda la risposta di Jared, avere Windows 2000 o versioni successive non risolverà necessariamente il problema in questione.La risposta di Rob funziona, tuttavia è possibile che questa correzione introduca problemi di sicurezza, poiché gli aggiornamenti di Windows non saranno in grado di applicare patch alle applicazioni create come tali.

In un altro post, Nick Guerrera suggerisce di creare il pacchetto Visual C++ Runtime Redistributable con le tue applicazioni, che si installa rapidamente ed è indipendente da Visual Studio.

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