Auch ich habe hinzugefügt SDL2.lib;SDL2main.lib zu Projekteinstellungen => Linker => Eingabe.
Was kann ich tun, um dieses Projekt durchzuführen?
VS 2012 SP3, leeres C++-Projekt.
Mögliches Duplikat von Warum SDL das Hauptmakro definiert?
– Mike Seymour
7. September 2013 um 10:25 Uhr
@MikeSeymour, es ist kein Duplikat: Dieser Thread enthält keine Antwort.
– Dmitri
7. September 2013 um 10:32 Uhr
@Computer, ja, Konsole.
– Dmitri
7. September 2013 um 10:35 Uhr
Ich habe gerade angefangen, c zu lernen und bin auf denselben Fehler gestoßen, dieser Fehler bedeutet, dass etwas nicht stimmt main()in meinem Code hatte ich es falsch geschrieben als Main mit großem m, nach der Korrektur verschwand der Fehler.
Klicken Sie mit der rechten Maustaste auf den Projektnamen -> Eigenschaften -> Registerkarte Linker erweitern -> System -> Subsystem: Stellen Sie sicher, dass dies der Fall ist Console (/SUBSYSTEM:CONSOLE)
Wenn Sie alternativ das Konsolenfenster ausblenden oder eine Multithread-Anwendung debuggen möchten, sollten Sie das SubSystem auf einstellen Window (/SUBSYSTEM:WINDOW) stattdessen.
Wenn Sie int main() dazu bringen können, sich selbst zu kompilieren, stellen Sie sicher, dass Sie Ihre Compilereinstellungen wie hier erwähnt überprüft haben, da je nachdem, wie Sie Ihr Projekt erstellt haben, diese Einstellung möglicherweise noch nicht für Sie erledigt ist . Genauso wie mein Problem.
– RücksendungVoid
20. November 2016 um 6:00 Uhr
Ich füge dieser Antwort hinzu. Wenn Sie eine SDL2-App debuggen und Multithreading zu dieser App hinzugefügt haben, anstatt sie zu verwenden Console (/SUBSYSTEM:CONSOLE)verwenden Window (/SUBSYSTEM:WINDOW). Dadurch sollte Visual Studio 2017 seinen lokalen Debugger auch erfolgreich an Ihre SDL2-App anhängen können, sodass Sie mehrere Threads gleichzeitig debuggen können.
– tom_mai78101
12. Mai 2018 um 1:53 Uhr
Keine Zeit mehr, meinen letzten Kommentar zu bearbeiten … Grund, warum Sie mitmachen müssen Window (/SUBSYSTEM:WINDOW) Denn Console (/SUBSYSTEM:CONSOLE) ist nur Single-Threaded.
– tom_mai78101
12. Mai 2018 um 2:03 Uhr
Ich habe diese Einstellung gefunden /SUBSYSTEM:KONSOLE ist nur die halbe Lösung. Die zweite Hälfte ist hinzuzufügen SDL_MAIN_HANDLED zu Ihren zusätzlichen Definitionen. Der Hinweis, den ich verwendet habe, um dies zu lösen, kann in gefunden werden SDL_main.h. Einstellung SDL_MAIN_HANDLED Teilen Sie den SDL-Header-Dateien mit, dass Sie bereits eine bereitgestellt haben main Funktion und möchten nicht, dass sie ihren eigenen Einstiegspunkt neu definiert.
Dies ist der richtige Weg, um dieses Problem zu lösen – gute Debugging-Fähigkeiten @dpiron. Wenn Ihr Projekt von Anfang an richtig eingerichtet ist, sollten Sie die Linker-Eigenschaften zu diesem Zeitpunkt nicht ändern müssen
– Benutzer3001499
15. September 2017 um 17:20 Uhr
Um weitere Informationen zu dem hinzuzufügen, worauf sich @user3001499 bezieht, müssen Sie mit a beginnen win32 Anwendungsprojekt, siehe VisualC.html.
– jrh
25. September 2018 um 15:25 Uhr
Gustav Maciel
NICHT#undef main! Während es auf SDL-Seite eine wirklich schlechte Praxis ist, es neu zu definieren, haben sie gute Gründe: WinMain ist auf der Bibliotheksseite definiert und wird zum Ausführen von Init-Code verwendet, was bei Kompatibilitätsproblemen hilft. (noch mehr, wenn Sie andere SDL-Implementierungen wie Steam verwenden oder auf andere Plattformen wie Android portieren)
Was sollten Sie also tun? Unter Windows sollten Sie immer einschließen SDL2main.lib Vor SDL2.lib und stellen Sie sicher, dass Ihre Hauptdatei das folgende Format hat:
int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT
Das int main(int, char**) ist auch richtig. Und was ist mit der Steam-SDL-Implementierung? Google scheint davon nichts zu wissen.
– HolyBlackCat
15. Juli 2017 um 21:41 Uhr
@HolyBlackCat wiki.libsdl.org/Installation#SteamOS SDL bietet einen dynamischen Loader und Steam enthält bekanntermaßen eine eigene Kopie von SDL, die für SteamOS unterschiedlich ist
– Gustavo Maciel
17. Juli 2017 um 0:43 Uhr
Beachten Sie, dass es auch notwendig ist, eine zu erstellen win32 Anwendungsprojekt. Sehen VisualC.html.
– jrh
25. September 2018 um 15:24 Uhr
Als ein tinky_winki schrieb
Klicken Sie mit der rechten Maustaste auf den Projektnamen -> Eigenschaften -> Registerkarte Linker erweitern -> System -> Subsystem: Stellen Sie sicher, dass es Konsole ist (/SUBSYSTEM:CONSOLE)
Aber wenn Sie keine Konsole mit Fenster erwarten, verwenden Sie einfach, /SUBSYSTEM:WINDOWS
Project >> Properties >> Linker >> Advanced >> entry point = main und apply
Tut mir leid, ich sage es nicht
Offen sdl_main.h
Veränderung
#define main sdl_main
zu
#define sdl_main main
jetzt geht es mit simple int Haupt() aber das ist ein schlechtes Hurra für kurzfristige Lösungen
11869300cookie-checkSDL2: LNK1561: Einstiegspunkt muss definiert werdenyes
Mögliches Duplikat von Warum SDL das Hauptmakro definiert?
– Mike Seymour
7. September 2013 um 10:25 Uhr
@MikeSeymour, es ist kein Duplikat: Dieser Thread enthält keine Antwort.
– Dmitri
7. September 2013 um 10:32 Uhr
@Computer, ja, Konsole.
– Dmitri
7. September 2013 um 10:35 Uhr
Ich habe gerade angefangen, c zu lernen und bin auf denselben Fehler gestoßen, dieser Fehler bedeutet, dass etwas nicht stimmt
main()
in meinem Code hatte ich es falsch geschrieben alsMain
mit großem m, nach der Korrektur verschwand der Fehler.– rasieren
28. Juli 2014 um 19:27 Uhr