2016-04-09 5 views
0

Ich bin ziemlich neu in C++ (und Programmierung im Allgemeinen) und ich versuche derzeit, die "SDL.h" Header in ein C++ Projekt in Eclipse (ich benutze minGW btw). Ich habe das Projekt mit den Pfaden zu den Header-Dateien und der SDL-Bibliothek versehen. Allerdings whenver I umfassen insbesondere „SDL.h“ und die Build dann Projekt, das ich die folgende Meldung: „.‚Starten von SDL Basic.exe‘hat ein Problem Programmdatei existiert nicht“SDL.h "Programmdatei existiert nicht"

Ich bin mir ziemlich sicher, dass dies mit der Tatsache zu tun hat, dass keine .exe-Datei generiert wird, wenn ich das Projekt mit SDL.h erstellt habe. Was ich nicht verstehe ist warum das passiert. Wenn ich einen anderen SDL-Header wie SDL_assert einfüge, ist das kein Problem. Dann wird die .exe-Datei wie gewohnt erzeugt und das Programm läuft genau so wie es sollte [Bildbeschreibung hier eingeben] [1]

http://i.stack.imgur.com/cdV8U.jpg Wie es aussieht, wenn SDL.h enthalten ist.

http://i.stack.imgur.com/MW7PX.jpg Wie es aussieht, wenn etwas anderes von SDL enthalten ist.

+0

Bitte geben Sie den vollständigen Text von der CDT Build Console. Ich sehe einen undefinierten Bezug in Ihrem Bild, aber ich bin gespannt, wie es über den Rand des Bildes hinausgeht. Es besteht die Möglichkeit, dass der Header SDL.h Code einliest, für den eine Verknüpfung in einer externen Bibliothek erforderlich ist, sodass die Verknüpfungsoperation fehlschlägt. – Aenimated1

+0

Okay, also hier ist der vollständige Text: http://imgur.com/XzKZruI –

Antwort

0

Ich habe das Problem behoben. Wann immer ich das Programm lief, das Konsolenfenster outout "undefinierter Verweis auf 'Winmain @ 16'". Also habe ich gegoogelt und herausgefunden, dass SDL eine eigene Hauptfunktion in SDL_main.h definiert, die mir insgesamt zwei Hauptfunktionen geben würde. Um zu verhindern, SDL aus der eigenen Hauptfunktion definiert, ich hatte das Makro SDL_MAIN_HANDLED zu definieren, bevor ich SDL.h enthalten, und sehen, es hat funktioniert:

http://i.stack.imgur.com/mNOOE.jpg

Wenn jemand dies genauer erklären kann, würde ich wirklich bin dankbar.

0

Ich habe ein wenig Nachforschungen gemacht und es sieht so aus, als ob der undefinierte Verweis auf WinMain @ 16 ist, weil SDL automatisch einen Windows-Einstiegspunkt für Ihre Anwendung erstellt, aber Sie nicht die erforderlichen Bibliotheken zur Verfügung gestellt haben dieser Einstiegspunkt. Wenn Sie jedoch beabsichtigen, die SDL-Funktionalität zu verwenden, benötigen Sie diesen Einstiegspunkt wirklich, da er mehrere wichtige Initialisierungsschritte ausführt, die erforderlich sind, um die SDL-Funktionen zu nutzen, die Sie vermutlich verwenden möchten.

Das Definieren von SDL_MAIN_HANDLED ist ein Mechanismus, mit dem Sie Ihren eigenen Windows-Einstiegspunkt (z. B. WinMain) bereitstellen können, aber das ist ein komplizierterer Ansatz (wenn auch flexibler). Das behebt nur Ihr Problem, weil es verhindert, dass "main" in "SDL_main" neu definiert wird, was wiederum bedeutet, dass Ihre .cpp-Datei nicht einmal mehr eine der SDL-Bibliotheken benötigt. So kompiliert und verbindet es, aber Sie haben keine SDL-Funktionalität, nach der Sie suchen.

Sie müssen in den entsprechenden Bibliotheken verknüpfen. Siehe here - es bietet einige Informationen, die helfen könnten.