Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

20.06.2011, 16:23

Projekt von Kapitel 12 kompilieren

Hallo Alle miteinander (mein erster Post hier :))
Ich habe das Folgende Problem:

In dem (auf der CD enthaltenen) Projektordner des 12. Beispiels "Ein Spiel mit der SDL" ist bereits eine komilierte .exe Datei enthalten (D:\Source\Kapitel 12\SDL_Game\SDL_Game.exe).

Wenn ich dasselbe Projekt exportiere (vorher auf meinen C: drive kopiert), erhalte ich eine .exe Datei, allerdings mit 2 Problemen:
1) Sie wird nie im Ordner C:\...\SDL_Game\ erstellt sondern immer nur im Ordner C:\...\SDL_Game\Debug\ oder \Release\
2) Wenn ich die Datei öffne (die andere von der CD geht bei mir) öffnet sich kurze Zeit ein Konsolenfenster, verschwindet aber sofort wieder


Ich habe das Projekt über Erstellen->Projektmappe neu erstellen kompiliert, gibt es da noch eine andere (funktionierende) Möglichkeit?

achja PS: Ich verwende VS 2010

Noch was: könnte es vielleicht damit zusammenhängen, dass ich die sdl Dateien in den gleichen Ordner mit all den vorinstallierten .h und .lib Dateien von c++ gegeben habe? Beim Kompilieren kam nämlich kein Fehler.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »pd9937« (20.06.2011, 16:51)


2

20.06.2011, 19:22

Hallo und erstmal Willkommen im Forum.

Das die .exe Datei im \Debug- bzw. \Release-Verzeichnis zu finden ist, dass ist ganz normal. Ist nämlich die Standard-Einstellung von VC++. Ist auch sinnvoll, so gibt es keine Missverständnisse, welche .exe die Debug Version von deinem Spiel und welche die Release Version ist. Wenn du die Anwendung über VC++ ausführst (F5 bzw. Strg + F5 ohne Debugging), dann wird sie allerdings im Projektverzeichnis, da wo deine Projektmappe (.sln) sich befindet, ausgeführt. Benötigte DLLs müssen also in das Projektverzeichnis.

Also einfach über die IDE ausführen und debuggen (F5 als Shortcut) und dann dafür sorgen, dass die DLL im Projektverzeichnis ist. Dann sollte das funktionieren.

Include- und Bibliotheksdateien sollten sich eigentlich immer in einem extra Verzeichnis dafür befinden. Die solltest du aus Gründen der Übersichtlichkeit und zur leichteren Fehlersuche also nicht irgendwo reinkopieren, wo sie nicht hingehören. Weder in das Projektverzeichnis, noch in irgendein Verzeichnis des Windows SDK oder der IDE.

Gruß
SaRu_

3

20.06.2011, 20:22

...

Also...

Habe ich das jetzt richtig verstanden, VS 2010 erstellt aus den vielen .h Dateien eine oder mehrere DLLs, die ich im projektordner haben muss, damit das kompilierte Programm lauffähig ist?



Edit: Ich habe das Programm jetzt mit f5 und strg+f5 ausgeführt. In dem Hauptordner mit der SLN finde ich aber weder eine .exe oder eine .dll Datei... Was mache ich falsch?

4

20.06.2011, 20:39

Nein dein Programm erstellt keine .dlls, sonder nur eine exe-Datei im Debug bzw.Release-Ordner. Allerdings braucht es die dlls der SDL. Die musst du in den Projektordner kopieren. Dann kannst du das Programm mit Strg + F5 ausführen

5

20.06.2011, 20:51

...

ok also wenn ich das Programm exportieren und für andere PCs ausführbar machen will muss ich einfahc nur sdl.dll mit der .exe Datei wo abspeichern?

Edit: Habs jetzt probiert. Wenigstens ein paar Fortschritte. Jetzt (wo die sdl.dll im release ordner ist) wird ein schwarzes Vollbildfenster geöffnet, kurz danach schließt sich das Programm allerdings wieder.

6

20.06.2011, 20:53

Die anderen DLLs und den Data-Ordner auch nicht vergessen

7

20.06.2011, 22:01

Ja um das noch mal zu erklären und zusammenzufassen:

Während der Entwicklung deiner Anwendung solltest du diese immer über die IDE (VC++) starten. Das machst du mit F5. Dabei wird die Anwendung gleichzeitig debugt - tritt also ein Fehler auf, wird die Anwendung angehalten und du bekommst Informationen zum Fehler, die du sonst nicht bekommen würdest. Damit das aber funktioniert müssen sich die vom Programm benötigten DLLs (in deinem Fall die SDL.dll) im Projektordner befinden, denn in diesem Ordner wird das Programm ausgeführt. Der \Debug- bzw. \Release-Ordner ist an dieser Stelle nicht von Bedeutung.

Läuft die Anwendung fehlerlos, kannst du sie natürlich auch direkt - also ohne den Umweg über die IDE - starten. Hier solltest du die .exe aus dem \Release-Ordner nehmen. Die DLLs sollten sich im gleichen Ordner befinden wie die .exe! Außerdem beziehen sich alle relativen Pfadangaben - wie stoni schon sagte - auf das Verzeichnis, in dem sich die .exe befindet. Der Ordner mit den Grafiken und anderen Daten sollte daher dann auch in das Verzeichnis mit der .exe kopiert werden. Generell sollte das Verzeichnis, in dem die Release-Version deiner Anwendung liegt, die gleiche Struktur aufweisen, wie das Projektverzeichnis, aus dem du während der Entwicklung deine Anwendung ausgeführt hast.

Gruß
SaRu_

8

21.06.2011, 06:47

...

Ah ok jetzt habe ich es verstanden :)

Danke für die Hilfe

Mastermind

unregistriert

9

22.06.2011, 01:07

Ja um das noch mal zu erklären und zusammenzufassen:

Während der Entwicklung deiner Anwendung solltest du diese immer über die IDE (VC++) starten. Das machst du mit F5. Dabei wird die Anwendung gleichzeitig debugt - tritt also ein Fehler auf, wird die Anwendung angehalten und du bekommst Informationen zum Fehler, die du sonst nicht bekommen würdest. Damit das aber funktioniert müssen sich die vom Programm benötigten DLLs (in deinem Fall die SDL.dll) im Projektordner befinden, denn in diesem Ordner wird das Programm ausgeführt. Der \Debug- bzw. \Release-Ordner ist an dieser Stelle nicht von Bedeutung.

Läuft die Anwendung fehlerlos, kannst du sie natürlich auch direkt - also ohne den Umweg über die IDE - starten. Hier solltest du die .exe aus dem \Release-Ordner nehmen. Die DLLs sollten sich im gleichen Ordner befinden wie die .exe! Außerdem beziehen sich alle relativen Pfadangaben - wie stoni schon sagte - auf das Verzeichnis, in dem sich die .exe befindet. Der Ordner mit den Grafiken und anderen Daten sollte daher dann auch in das Verzeichnis mit der .exe kopiert werden. Generell sollte das Verzeichnis, in dem die Release-Version deiner Anwendung liegt, die gleiche Struktur aufweisen, wie das Projektverzeichnis, aus dem du während der Entwicklung deine Anwendung ausgeführt hast.

Gruß
SaRu_



Halte ich in der Form für totalen Blödsinn.

1) Der Debugger hält die Anwendung nicht an wenn ein Fehler auftritt. Normalerweise setzt man einen Haltepunkt in Code in dem man den Fehler vermutet. Was du vermulich meinst ist dass der Debugger anhält wenn eine nich gefangene Exception auftritt oder meinentwegen ein SEGFAULT. Aber ist sind meiner Erfahrung nach nur ein sehr geringer Prozentsatz der Fehler.

2) Man kann auch einfach sein Projekt vernünftig konfigurieren, sodass das Arbeitsverzeichnis dem Verzeichnis entspricht in dem auch die exe liegt. Wieso das nicht per default so ist, ist mir ohnehin schleierhaft. Eventuell kann auch ein post-build Ereignis sinnvoll was die exe in das Verzeichnis mit den Ressourcen kopiert statt umgekehrt. Oder man verwendet gleich CMake. Ist eh viel sinnvoller.

10

22.06.2011, 01:49

Ja, natürlich unterbricht der Debugger die Anwendung nicht bei jedem Fehler der auftritt, aber ich habe es hier vereinfacht für einen Anfänger dargestellt und ich denke das unbehandelte Ausnahmen häufiger vorkommen ... insbesondere bei Anfängern.

Wie das Projektverzeichnis mit allen Unterordnern strukturiert und aufgebaut ist, das kann ja zum Glück jeder selbst für sich entscheiden. Ich persönlich finde es so, wie es per default bei VC++ ist, gut. Aber darum ging es ja auch gar nicht. Mein Ziel war nur, dass pd9937 überhaupt das Projekt aus dem Buch zum Laufen kriegt und versteht wie es angelegt ist. Für eine Diskussion darüber, welche Lösung jetzt die aller beste ist, habe ich Spielraum gelassen, darum geht es mir nicht... das überlass ich anderen.

Gruß
SaRu_

Werbeanzeige