Seite 1 von 1

VC: Probleme mit gl.h

Verfasst: 21.10.2009, 20:40
von Jonathan
Nach dem ich von Codeblocks auf VC umgestiegen bin, hatte ich (enorm viele) Compilerfehler, wenn ich einfach nur die gl.h inkludiert habe. Die braucht offensichtlich ne Menge Zeug aus der windows.h. Nun, das Problem kann man lösen, indem man zuerst immer noch die windows.h inkludiert, was erstens hässlich und zweitens auch falsch ist, sobald man das ganze z.B. unter Linux kompiliert.
Die zweite Läsung war, die glew.h zu inkludieren, diese beinhaltet alle nötigen Informationen aus der windows.h (verpackt in einem ifdef-Block). Allerdings finde ich es auch nicht so megatoll, immer gleich die glew.h zu inkludieren, die ist ja nicht OpenGL Standard und damit prinzipiell eine zusätzliche Abhängigkeit.
Insgesamt nicht so das große Problem, gelöst hab ich es ja praktisch schon, aber mir gefallen alle Wege irgendwie nicht. Ich hab auch irgendwie das Gefühl, dass es ein Designfehler sein könnte, dass die gl.h zwingend Definitionen aus einer anderen Datei benötigt, das man also immer beide einbinden muss.

Re: VC: Probleme mit gl.h

Verfasst: 22.10.2009, 08:38
von Schrompf
Was ist jetzt Deine Frage? :-)

Multiplattform-Entwicklung läuft in C/C++ am Ende *immer* auf #if und #endif hinaus. Ich sehe ehrlich gesagt nicht, was Du daran anders machen könntest. Deine einzige Option ist, Dritt-Bibliotheken zu benutzen, die das #if/#endif dann in ihren eigenen Sourcen betreiben, so dass Du Dich nicht darum kümmern musst. Aber anscheinend gefällt Dir diese Option auch nicht. Wenn Du genauer beschreibst, was Dich an den beiden Optionen eigentlich stört, kann ich Dir vielleicht besser helfen.

Re: VC: Probleme mit gl.h

Verfasst: 22.10.2009, 09:24
von kimmi
Du könntest OS-spezifische Header anlegen, um die Probleme je nach Plattform an einer Stelle zu bündeln. Dann könntest du die Anzahl der Include-Guards minimieren. So könntest du zum Beispiel einen Header OS.h bauen, in dem du die benötigten ifdef-Blöcke um die plattform-spezifischen Includes setzt. So eine Kapselung verschmutzt den restlichen Code nicht so sehr.
Darum herum kommen wirst du nur, wenn du wie Schrompf schon sagte, eine Third-Party-Lib wie beispielsweise SDL benutzt.

Gruß Kimmi