Creazione eseguibile da un codice in c++

di il
10 risposte

Creazione eseguibile da un codice in c++

Salve a tutti, ho iniziato da poco a programmare, e ultimamente ho riscontrato questo problema:
Utilizzo Code::blocks per scrivere programmi, e sto avendo grandissimi problemi a ottenere un file .exe da poter distribuire, infatti se vado nella cartella "bin" e poi nella cartella "Debug" oppure "Release", trovo in entrambi i casi un file .exe, ma in entrambi i casi mi dà un errore se provo ad aprirlo:
Nella cartella debug ottengo questo messaggio:
"L'esecuzione del codice non può proseguire perché libgcc_s_seh-1.dll non è stato trovato. Per risolvere il problema, prova a reinstallare il programma."

Nella cartella release ottengo invece questo altro messaggio:
"L'esecuzione del codice non può proseguire perché libstdc++-6.dll non è stato trovato. Per risolvere il problema, prova a reinstallare il programma."
Vi ringrazio moltissimo in anticipo dell'aiuto.
Thomas Leihkauf

10 Risposte

  • Re: Creazione eseguibile da un codice in c++

    1) in "release" c'e' la versione "release" del programma, cioe' una versione SENZA le informazioni di debug necessarie durantelo sviluppo
    2) in "debug" c'e' la versione contenente informazioni aggiuntive necessarie al ""debugging"" appunto. Questa versione non deve essere distribuita: e' MOOLTI piu' grossa della versione "release" ed e' utile SOLO durante lo sviluppo.

    3) il programma si lamenta perche' non trova delle DLL che sono distribuite con il compilatore "GNU gcc" che stai usando. Le trovi dentro la directory del compilatore.

    OGNI compilatore C/C++ usa delle librerie che DEVONO essere disponibili all'applicazione.
    Anche Visual Studi ha lo stesso problema, ma quando lo installi, lui AUTOMATICAMENTE installa le librerie in modo da renderle disponibili a TUTTE le applicazioni.

    Purtroppo la logica di TUTTE le applicazioni Microsoftw e'

    1) esisto solo io e nessun altro. Io sono la perfezione, niente e' meglio di me
    2) ogni applicazione e' un'estensione del Sistema Operativo (vedasi il fatto che ogni 2 per tre, l'installazione di un'applicazione Microsoft richiede il riavvio del PC), quindi OGNI modulo aggiuntivo va a finire nelle directory condivise da TUTTE le applicazioni

    Invece, il resto del mondo, e' molto piu' ""circostanziato"": ogni applicazione SA cosa gli serve e la deve trovare nella sua directory LOCALE.

    I pregi del primo approccio e' che TUTTO funziona al primo colpo A MENO di conflitti (che si risolvono dopo un bagno di sangue SE si riescono a risolvere)
    I pregi del secondo approccio e' che OGNI applicazione deve avere sotto mano TUTTO quello che gli serve MA se non c'e' e' responsabilita' del programmatore andare a caccia dell'informazione mancante e copiarla nella directory dell'applicazione.
  • Re: Creazione eseguibile da un codice in c++

    Grazie mille, ho inserito le estensioni necessarie (trovate nella directory del programma) nella cartella del mio codice, e funziona.
    Grazie infinite.

    Una ultima domanda se hai voglia, è possibile includere le librerie direttamente nel codice, e quindi mandare solo quello, oppure bisogna inviare la cartella con l'eseguibile e tutte le estensioni necessarie?

    Grazie infinite dell'aiuto che mi hai fornito.

    Thomas
  • Re: Creazione eseguibile da un codice in c++

    Puoi aggiungere le directory di quelle dll alle variabili d'ambiente di sistema, così da non doverle ricopiare ogni volta.

    Per aggiungerle direttamente all'eseguibile, vai su Settings > Compiler e nella schede Compiler settings > Compiler Flags spunta le caselle: "Static libgcc" e "Static libstdc++" (funziona se ci sono dei file .a o .lib installati di quelle librerie).

    Per avere Codeblocks più compilatore già configurato (un po' come Visual Studio), puoi scaricare TDM-GCC
    https://sourceforge.net/projects/tdm-gcc
  • Re: Creazione eseguibile da un codice in c++

    In teoria potresti creare un eseguibile senza dll, includendo nell'eseguibile le librerie in formato .lib (mi sembra di ricordare che dovrebbe bastare fare una cosa del genere):
    gcc -o mioexe mioexe.cpp -lmialib -laltralib
    Questo sempre che tu abbia la versione .lib delle .dll.
    In alternativa, ti fai un package installabile con nsis (https://nsis.sourceforge.io/Main_Page, è un tool molto semplice ma anche parecchio serio). Dici a nsis quali sono le dll da includere nella distribuzione, dove vanno, ecc. e lui ti crea un exe di installazione.
  • Re: Creazione eseguibile da un codice in c++

    Purtroppo è un problema già riscontrato da molti user. Si verifica con l'ultima release di Codeblocks in abbinamento a Windows10.
    Prima non accadeva, anzi funzionava tutto a meraviglia.

    Personalmente ho risolto cambiando IDE.

    Ora uso Embarcadero DevC++ che si differenzia molto dal precedente DevC++ classico.



    Provalo e risolvi un sacco di problemi.
  • Re: Creazione eseguibile da un codice in c++

    ramcrack ha scritto:


    Purtroppo è un problema già riscontrato da molti user. Si verifica con l'ultima release di Codeblocks in abbinamento a Windows10.
    Prima non accadeva, anzi funzionava tutto a meraviglia.

    Personalmente ho risolto cambiando IDE.

    Ora uso Embarcadero DevC++ che si differenzia molto dal precedente DevC++ classico.



    Provalo e risolvi un sacco di problemi.
    A me funziona, forse è l'installazioene di mingw che è monca, per questo ho consigliato il pacchetto TDM (errore mio, non comprende CB, ma bastano due clic per indicargli la cartella). Il nuovo Dev C volevo provarlo, ma un download che non chieda compagnia e numero di telefono non c'è?
  • Re: Creazione eseguibile da un codice in c++

    Usa compagnia e numero di telefono farlocchi:-)
  • Re: Creazione eseguibile da un codice in c++

    Ahahah. Trovato su Github comunque, anche comprensivo di compilatore:
    https://github.com/Embarcadero/Dev-Cpp/release
  • Re: Creazione eseguibile da un codice in c++

    Vedo idee un pochino confuse
    non è il compilatore, ma il linker, che può essere istruito a creare un eseguibile senza dipendenze.
    Normalmente proprio nella chiamata a gcc o clang o quello che si vuole.
    Normalmente poi va fatto lo strip
  • Re: Creazione eseguibile da un codice in c++

    Thomas Leihkauf ha scritto:


    Grazie mille, ho inserito le estensioni necessarie (trovate nella directory del programma) nella cartella del mio codice, e funziona.
    Posso chiederti precisamente in quale cartella le hai trovate?
Devi accedere o registrarti per scrivere nel forum
10 risposte