Hallo, Zusammen.
Coole Sache, was ihr alles hinbekommen habt! :clap:
Ich hab mich heut' auch mal im Compilieren versucht, wollte aber ohne Mac-Ports auskommen.
SDL, SDL_mixer kursieren ja als fertige Os X Frameworks im Netz, libsamplerate und libsndfile gibt's als Mac-Port-freie Version auf
http://www.mega-nerd.com (als Code, muss noch compiliert werden, geht aber ohne schwierigkeiten...).
Als Grundlage hab ich die Aktuelle Version mit bzr geladen, und die Anpassungen analog zu Renes Erklährung in Post 66 gemacht, mit ein paar kleinen Änderungen:
- In den main.h's der Beiden Treiber (Audio und Video) habe ich die direkten Pfade in die IHMO von Apple für Frameworks empfohlene Variante (siehe
http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/IncludingFrameworks.html#//apple_ref/doc/uid/20002257) geändert, also z.B. "#include <SDL/SDL.h>" und "#include <SDL_mixer/SDL_mixer.h>".
- In der local.cmake die Framework-Direktiven herausgelassen, da die bei mir folgende Fehler erzeugten:
Code:
i686-apple-darwin9-g++-4.0.1: -framework: linker input file unused because linking not done
i686-apple-darwin9-g++-4.0.1: Cocoa: linker input file unused because linking not done
(da hab ich wahrscheinlich irgendwas falsch gemacht :\ , kann mir da jemand auf die Sprünge helfen? Ich bin mir auch nicht sicher, ob das normal ist, dass er g++ verwedet, sollte der nicht mit cpp arbeiten?)
- In den Frameworks, die ich geladen hatte, habe ich die Includes in SDL_mixer.h ebenfalls auf "#include <SDL/SDL_types.h>" etc. ersetzt, da ich nicht jede Datei einzeln suchen und angeben wollte, und mir irgendjemand mal gesagt hatte, dass das so stimmen würde ;-)
- Das Linken von *.dylib zu *.so hat bei mir nicht so recht geklappt. Ich hab dann den Code mal angesehen, und gelesen, dass bei allen Plattformen außer Windows die Treiber in dem Verzeichnis "FILE_PATHS[46] + DIRECTORY[dt]" (=Treiberverzeichnis) gesucht werden, welches in der files.h auf DATADIR"/driver" zeigt. DATADIR wird auf Nicht-Windows-Systemen auf PREFIX"/share" gelegt - wenn ich beim Compilieren Prefix auf "." setze, würde er also ein "./share"-Verzeichnis erwarten (denke ich), das es bei mir irgendwie nicht gab (unter /usr/local natürlich schon...) - also habe ich kruzerhand den Code in der File.h geändert in:
C++:
#ifndef DATADIR
# ifdef _WIN32
# define DATADIR PREFIX
# else
# ifdef __APPLE__
# define DATADIR PREFIX
# else
# define DATADIR PREFIX"/share/s25rttr"
# endif
# endif
#endif // !DATADIR
Ebenso habe ich die DriverWrapper.cpp in DriverWrapper::LoadDriverList angepasst auf
C++:
#else
# ifdef __APPLE__
std::string path = FILE_PATHS[46] + DIRECTORY[dt] + "/" + "*.so;*.dylib";
# else
std::string path = FILE_PATHS[46] + DIRECTORY[dt] + "/" + "*.so";
# endif
#endif // !_WIN32
- In der CMakeLists.txt unter Driver/video musste ich den GLFW-Teil auskommentieren, da er sonst immer mit diversen Fehlern beim Build abbrach (GLFW hatte ich auch installiert) und garnicht bis zu SDL kam
Soweit, so gut... make klappt Fehlerfrei, die Treiber werden auf Anhieb gefunden, nur leider funktioniert's trotzdem nicht... :(
Wenn ich's starten will, bricht er mit einer NSInternalInconsistencyException ab, Meldung: "Error (1002) creating CGSWindow"
Kann es sein, dass ich da die Falsche SDL-Version verwende?
Ich kann mich erinnern, dieses Problem schoneinmal mit einem FreePascal Programm und SDL auf Mac Os X gehabt zu haben, da war der Fehler, dass die SDLmain-Bibliothek nicht korrekt gebunden wurde - ich schätze, hier wäre der Trick, -LSDLmain in die CFlags einzufügen, die in Post 66 beschrieben - leider generiert das den selben Fehler wie oben bei den Frameworks...
Hab ich so überhaupt eine Chance, ohne MacPorts auszukommen?