Come posso compilare il codice C ++ in un eseguibile Windows indipendente? [chiuso]


-1

Ho un programma C ++ che posso compilare ed eseguire su Mac OS 10.11 usando g ++. Sono stato anche in grado di compilare ed eseguirlo su Windows 10 utilizzando Visual Studio. Tuttavia, quando ho provato a eseguire il file .exe su un computer Windows 10 su cui non era installato Visual Studio, Windows si è lamentato del fatto che non esistevano diversi file DLL.

Mi piacerebbe poter eseguire questo programma su computer Windows senza richiedere l'installazione di nulla. Il programma è molto semplice, costituito da un file .cpp, e vive solo in un terminale di solo testo. Tutto ciò che fa è chiedere input, visualizzare del testo e scrivere su un file. Sto usando queste librerie:

#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

Ho anche provato MinGW sia su Cygwin, sia su OS X. Entrambi danno errori ‘stoi’ was not declared in this scope. Ho provato questa patch senza successo: https://stackoverflow.com/questions/16132176/problems-with-stdstoi-not-working-on-mingw-gcc-4-7-2 Non so se MinGW sarebbe la mia. exe indipendente da altri file.

Come posso far funzionare il mio programma su Windows in modo autonomo, quindi non è necessario che l'utente installi alcun file .dll o altro software?


Ciò che desideri richiede l'uso di un compilatore che lo consenta o fornisca ai file dll lo stesso .exe. "quindi non richiede alcun file .dll o altro software?" letteralmente impossibile.
Ramhound,

Non capisco come potrebbe essere "letteralmente impossibile". Esistono molti programmi Windows (in particolare i programmi MS-DOS) che non richiedono agli utenti di installare nulla a parte Windows stesso. Forse hai pensato che stavo dicendo che voglio che non richieda letteralmente nessun altro software. Ho fatto una modifica per essere esplicito che non voglio che l'utente abbia bisogno di installare alcun software, ma ovviamente Windows è lì insieme ai suoi file .dll standard.
Il

Probabilmente è necessario assicurarsi che i ridistribuibili di Visual C ++ siano installati sull'altro computer (è possibile scaricare dal sito MS). Presumo si stia lamentando di MSVCR100.dll o qualcosa di simile.
Tom Carpenter,

1
Vedi questa domanda StackOverflow per come collegare staticamente la libreria di runtime in modo da non aver bisogno dell'installazione ridistribuibile.
Tom Carpenter,

Se si collega una libreria in fase di compilazione, operazione eseguita, tale libreria è necessaria sul sistema su cui verrà eseguito l'eseguibile. I programmi MS-DOS non sono programmi Windows. Se il tuo programma non richiede librerie aggiuntive, ciò che hai descritto avrebbe funzionato, dal momento che le ha richieste, significa che sei collegato alle librerie e quindi sono necessarie.
Ramhound,

Risposte:


0

Quando compili qualcosa con il compilatore Microsoft Visual C ++, lo compila per essere collegato dinamicamente alla DLL di runtime MS VC ++ (penso che corrispondendo alla versione di VS che hai, ad esempio VS2010 utilizzerà il runtime 2010). Presumibilmente, ciò consente loro di poter aggiornare le DLL senza che sia necessario ricompilare l'applicazione.

Ciò significa che è necessario installare la libreria di runtime su qualsiasi computer che utilizzerà l'applicazione. Questi sono distribuiti come parte dei programmi di installazione ridistribuibili di Visual C ++ disponibili sul sito Web di MS. In effetti molti computer avranno già installato le DLL richieste in quanto vi sono molti programmi che installano il ridistribuibile come parte del loro processo di installazione. Ma questi non sono garanzia che ciò avvenga (ad essere sincero, mi sorprende che non vengano installati automaticamente tramite Windows Update).

C'è una domanda StackOverflow qui che fornisce alcuni indizi su come collegare staticamente le librerie di runtime in modo da non richiedere l'installazione delle DLL ridistribuibili.


Grazie Tom. Ci sto provando, ma ricevo un sacco di nuovi errori quando compilo come unresolved external symbol __malloc_dbg.
Il

Se questa risposta non ha risposto completamente alla tua domanda, non dovrebbe essere accettata, poiché accettando questa risposta si indica che il problema è stato risolto
Ramhound,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.