LNK2019: simbolo esterno non risolto _main di riferimento in funzione ___tmainCRTStartup

Ho il seguente errore LNK2019: simbolo esterno non risolto _main di riferimento in funzione ___tmainCRTStartup,

Ci sono un sacco di thread riguardanti questo errore, ma nessuna di queste soluzioni ha funzionato per me. E, nessuno ha spiegato perché questo errore è qui.

Ho provato:

non hanno provato e il sospetto che questi, inoltre, non funziona:

perché ricevo questo errore e qual è la soluzione?

  • Hai un int main(char** argv, int argc) funzione?
  • si tratta di “int main(int argc, char** argv)” (l’ordine è di sbagliato nel tuo prototipo)
  • Grazie. Mi dispiace. Non mi funzionano anche su Windows comunque, ma che ‘s la firma ovunque. Doh.

 

12 Replies
  1. 30

    Qual è il tuo tipo di progetto? Se si tratta di un “progetto di Win32”, il punto di ingresso deve essere (w)WinMain. Se si tratta di un “Progetto Console Win32”, quindi dovrebbe essere (w)main. Il nome _tmain è #definiti per essere main o wmain a seconda se UNICODE è definita o no.

    Se è una DLL, quindi DllMain.

    Il tipo di progetto può essere visto sotto la proprietà del progetto, di collegamento, Sistema, Sottosistema. Sarebbe dire “Console” o “Windows”.

    Nota che il nome del punto di ingresso varia a seconda se UNICODE è definita o no. Nel 2008, è un’impostazione predefinita.

    La corretta realizzazione di un prototipo per principale è

    int _tmain(int argc, _TCHAR* argv[])

    o

    int _tmain()

    Assicurarsi che sia uno di quelli.

    EDIT:

    Se stai ricevendo un errore sul _TCHAR, posto un

    #include <tchar.h>

    Se si pensa che il problema è con una delle intestazioni, andare nelle proprietà del file con il main(), e sotto il Preprocessore, abilitare la generazione del file pre-elaborato. Quindi compilare. Si otterrà un file con lo stesso nome .io estensione. Aprirlo e vedere se qualcosa di sgradevole accaduto per la funzione main (). Non ci può essere canaglia #definisce in teoria…

    EDIT2:

    Con UNICODE definito (che è il default), il linker si aspetta che il punto di ingresso per essere wmain(), non main(). _tmain ha il vantaggio di essere UNICODE-agnostico – essa si traduce in main o wmain.

    Qualche tempo fa, c’era una ragione per mantenere sia una build ANSI e Unicode costruire. Supporto Unicode è stato gravemente incompleta in Windows 95/98/Me. Il primario Api ANSI e Unicode versioni esiste qui e là, ma non in modo pervasivo. Inoltre, il debugger di VS avuto problemi di visualizzazione delle stringhe Unicode. Nel NT kernel di Sistemi operativi (che Windows 2000/XP/Vista/7/8/10), il supporto Unicode è primario, e ANSI sono state aggiunte le funzioni di vertice. Così, fin VS2005, il valore di default al momento di creazione del progetto è Unicode. Che significa – wmain. Non riusciva a tenere lo stesso nome del punto di ingresso perché i tipi di parametro sono diversi. _TCHAR è #definita sia di tipo char o wchar_t. Così _tmain è main(int argc, char **argv) o wmain(int argc, wchar_t **argv).

    Il motivo si fosse trovato un errore in _tmain a un certo punto è stato probabilmente perché non cambiare il tipo di argv per _TCHAR**.

    Se non avete intenzione di mai il supporto ANSI (probabilmente no), si può riformulare il punto di ingresso in quanto

    int wmain(int argc, wchar_t *argv[])

    e rimuovere il tchar.h di includere la riga.

    • tipo di progetto è Console
    • Ho provato a cambiare int main() int _tmain() e c’è ancora un error lnk2019
    • int _tmain(int argc, _TCHAR* argv[]) risultati in errore C2061: errore di sintassi : identificatore ‘_TCHAR’; ho provato variazioni di questo con int main(int argc, char** argv) che ha restituito l’iniziale error lnk2019
    • se io rimuovere tutte le intestazioni con l’eccezione di #include <iostream> e commento di tutte, ma una linea di test di testo e quindi questo viene compilato, così sembra che il problema è in uno dei file di intestazione – che cosa è il processo di traccia giù un problema in un’intestazione con il risultato che il lnk2019 errore principale
    • Se stai ricevendo un errore sul _TCHAR, posto un #include <tchar.h> vedi Anche la mia modifica.
    • che lavorato. Non ho fatto di connessione con #include <tchar.h> visto alcuni thread ho fatto riferimento e int _tmain(int argc, _TCHAR* argv[]); si può spiegare cosa sta succedendo funzionalmente cosa c’era di sbagliato con int main(), perché tutte queste altre cose?
    • Diciamo che da upvoting la risposta 🙂
    • Ho cambiato il Sottosistema dalla Console di Windows e ha risolto il mio problema!!

  2. 6

    Perché non è stato ancora citato, questa era la soluzione per me:

    Ho avuto questo errore con DLL dopo la creazione di una nuova configurazione per il mio progetto. Ho dovuto andare a Project Properties -> Configuration Properties -> General e modificare il Configuration Type per Dynamic Library (.dll).

    Quindi, se hai ancora problemi dopo aver provato tutto il resto, vale la pena di controllare per vedere se il tipo di configurazione è quello previsto per il vostro progetto. Se non è impostato correttamente, il compilatore cercherà sbagliato simbolo principale. Nel mio caso, che stava cercando di WinMain invece di DllMain.

  3. 3

    Ho ottenuto questo errore mentre stavo cercando di spegnere le intestazioni precompilate in un Progetto di Applicazione Console e rimuovere l’intestazione del file stdafx.h

    Per risolvere questo problema vai di tua proprietà del progetto -> il Linker -> Sottosistema
    e modificare il valore di Non Impostato

    Nella tua classe principale, utilizzare lo standard C++ funzione principale prototipo che altri hanno già detto :

    int main(int argc, char** argv)
  4. 2

    Se si dispone di un “progetto di Win32” + definito un WinMain e il Sottosistema del linker è impostato su WINDOWS è ancora possibile ottenere questo errore di linker, nel caso in cui qualcuno impostare “Opzioni Aggiuntive” nel linker impostazioni “/SUBSYSTEM:CONSOLE” (simile a questa impostazione aggiuntiva è preferito rispetto all’attuale Sottosistema di impostazione.

  5. 1

    Trovo che quando ho scelto l’opzione di
    Progetto->Proprietà->il Linker->Sistema->Sottosistema->Console(/subsystem:console),
    e quindi assicuratevi di includere
    la funzione :
    int _tmain(int argc,_TCHAR* argv[]){return 0}
    tutti la compilazione ,linking e l’esecuzione sarà ok;

    • assicurarsi di includere tchar.h
    • Questo ha funzionato per me. Infatti ha funzionato quando sottosistema con il ‘set’ anche.
  6. 1

    Ho avuto questo errore, quando accidentalmente mettere il wmain all’interno di uno spazio dei nomi. wmain non dovrebbe essere in qualsiasi spazio dei nomi. Inoltre, ho avuto una funzione principale in uno dei libs stavo usando, e VS prese il principale, che è ancora sconosciuto.

    • Scommetto che questo è il problema in un sacco di casi.
  7. 1

    Non ho avuto questo problema minuti fa. E ‘ andato via quando ho aggiunto “extern ” C”‘ to main() definizione.

    Stranamente, un altro semplice programma che ho scritto ieri è quasi identico, non hanno extern “C”, ancora compilato senza questo errore del linker.

    Questo mi fa pensare che il problema sia qualche sottile impostazione per essere trovati nel profondo alcune di dialogo di configurazione, e che “extern ” C”‘ non risolve realmente il problema di fondo, ma superficialmente fa funzionare le cose.

  8. 0

    questo main funziona in linux e windows – trovato attraverso tentativi ed errori, e l’aiuto degli altri, così non può spiegare perché funziona, solo che non int main(int argc, char** argv)

    non tchar.h necessario

    e qui è la stessa risposta in Wikipedia Funzione principale

    • Mai sentito parlare di wmain()?
  9. 0

    Nel mio caso, è perché ho rimosso accidentalmente (ma non cancellato) il stdafx.h e targetver.h file in File di Intestazione sezione.

    Aggiungere i file File di Intestazione e il problema è risolto.

    Ho avuto questi:

    #pragma comment( linker, "/entry:\"mainCRTStartup\"" ) //set the entry point to be main()

    Ho solo bisogno di commento (anteponendo //) e va bene.

  10. 0

    Ho avuto questo accada in Visual Studio 2015 anche per un interessante motivo. Solo l’aggiunta di qui nel caso in cui succede a qualcun altro.

    Avevo già il numero di file nel progetto e stavo aggiungendo un altro che avrebbe funzione principale, tuttavia, quando inizialmente ho aggiunto il file che ho fatto un errore di battitura, l’estensione (.coo invece di .cpp). Ho corretto, ma quando mi è stato fatto ho ottenuto questo errore. Si è scoperto che Visual Studio era l’essere intelligente e quando è stato aggiunto il file è stato deciso che non è un file di origine a causa dell’iniziale estensione.

    Clic destro sul file in esplora soluzioni e scegliere Proprietà -> Generale> ItemType e l’impostazione di “compilatore C/C++” risolto il problema.

  11. 0

    Ho avuto il problema prima, ma è stato risolto. Il problema principale è che ho erroneamente incantesimo int main() funzione. Invece di scrivere int main() ho scritto int mian()….Evviva !

    • Questa risposta è troppo specifico per te. Dal main non è errato ovunque in OP è domanda, non c’è motivo di ritenere questo è il problema.
    • OP non mostra alcun codice sorgente, ha appena dichiarato l’errore. Ho avuto lo stesso errore oggi, ma dopo capì che ho scritto male la parola principale, quindi, dopo aver correggere l’errore scompare ..
  12. 0

    LNK2019: simbolo esterno non risolto _main di riferimento in funzione ___tmainCRTStartup

    Imposta il sistema per la console, seguendo i suggerimenti precedenti. Solo, anche dovuto cambiare il set di caratteri Unicode, vedere l’istantanea di Visual Studio 2015 sopra.

Lascia un commento