Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 08:06

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 14:41 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Hi,
ich mach gerade meine ersten Gehversuche mit glew. Ich habe via SDL_SetVideoMode ein Fenster erzeugt und rufe nun glewInit auf. Diese Funktion ruft offenbar glewContextInit auf, in der es eine Zugriffsverletzung gibt. Und zwar in dieser Zeile (8017):
Code:
  1. if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT);

Ich habe glew.c inkludiert, welche sich auch um die Einbindung von glew.h kümmert. Wenn ich glew.h explizit auch include, ändert es auch nichts. Irgendwelche Libraries habe ich nicht gelinkt, da keine im Download-Zip drin waren. Brauche ich vielleicht noch eine, wenn ja woher?

Danke schonmal im Voraus für eure Hilfe!


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Du solltest "glew.h" includen und gegen die glew-Library linken, die man von dort bekommt. Ohne Library wirds wohl nicht funktionieren...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 15:53 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ach, danke das du mich nochmal zur Download page verlinkt hast. Mir ist gar nicht aufgefallen, dass es einmal den Src- und einmal den Bin-Download gibt. :oops:

Habe mir jetzt also auch die Libraries runtergeladen und sie gelinkt. Leider ändert es nichts daran, dass ich immer noch eine Zugriffsverletzung bekomme. :(

Edit: Nachdem ich glew.c wieder rausgeworfen habe, läuft es jetzt einwandfrei. Danke für deine Hilfe! :D


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
In C/C++ inkludiert man immer nur den Header, nicht den eigentlichen Quellcode in *.c oder *.cpp Dateien.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 16:27 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Und woher weiß dann der Compiler (wenn es keine Library gibt), wo die ganzen Definitionen für die im Header deklarierten Funktionen sind? Ich hab bei selbst geschriebenen Headern bisher immer die cpp inkludiert und es hat immer funktioniert.^^ Wüsste nicht warum man die Cpps weglassen sollte.


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Die .cpp Dateien enthalten den eigentlichen Quellcode, die Header definieren meistens nur die Schnittstelle.
Damit der Quellcode auch im fertigen Programm ankommt, wird dem Compiler die .cpp Datei zum kompilieren übergeben. D.h. wenn du jetzt z.B. den Source Code von glew einbinden willst, und nicht die lib benutzt, includierst du überall die glew.h und gibst dem Compiler die glew.c mit auf den Weg. Der kompiliert die glew.c dann fest in das Programm und alle anderen Code Dateien holen sich die Infos aus dem glew.h Header.

Wenn du die lib benutzt, includierst du auch nur die glew.h, sagst dem Compiler (bzw. dem Linker) aber, dass er die Bibliothek einbinden soll, das geht entweder mit einer statischen Bibliothek, wobei der Code dann in die Binary deines Programms übernommen wird, oder, bei dynamischen libs, erhält die Binary nur die Information, dass diese Bibliothek zur Laufzeit geladen werden soll. Die Informationen über die Orte der Funktionen etc. stehen weiterhin in dem glew.h Header.

Die Compiler bzw. Linker Optionen werden meistens von einer IDE übernommen, d.h. wenn du in der IDE angibst, dass er die lib linken soll, dann reicht die IDE das beim kompilieren an den Linker weiter.
Wenn du in einer IDE den Source Code einbinden willst, dann reicht es meistens die entsprechende .c/.cpp Datei in das Projekt aufzunehmen, alle Code Dateien in einem Projekt werden dann für gewöhnlich einfach dem Compiler übergeben.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 17:05 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Und wo ist jetzt der Vorteil, wenn ich alles einzeln kompiliere und als Bibliotheken linke? Ich finde es jedenfalls einfacher, wenn ich ein
Code:
  1. #include <xxxx.cpp>
schreibe statt
Code:
  1. #include <xxxx.h>
  2. #pragma comment(lib, "xxxx.lib")
oder Units in irgendwelche Listen eintrage. :?:


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 17:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wüsste nicht warum man die Cpps weglassen sollte.

Die Idee ist das jede *.cpp Datei zu einem sogenannten Objectfile *.o compiliert wird. Der Linker fügt dann die ganzen Objectfiles zusammen zu einer ausführbaren Datei.

Vorteil 1: Wenn du in einer *.cpp Datei etwas änderst (häufig, hier ist ja der Großteil des Quellcodes) muss nur das zugehörige Objectfile neu erzeugt werden und der Linker muss die ausführbare Datei neu linken. Aber der Rest des Programms muss NICHT neu compiliert werden!

Vorteil 2: Da die Objectfiles unabhängig voneinander sind können sie gleichzeitig compiliert werden. Z.B. hier am Lehrstuhl haben wir ein System das alle verfügbaren Rechner und CPU-Kerne im Netzwerk nutzt, d.h. man hat effektiv einen 40-Kerner und das compilieren geht entsprechend quasi 40mal schneller. Aber auch mein QuadCore zu Hause lässt sich dann mal wirklich nutzen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 17:23 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Nun gut bei Extremprojekten (Linux-Kernel oder so?) mag es ja sinnvoll sein, dass man so unglaublich schnell kompilieren kann bzw. nur kleine Teile neu kompilieren muss. Für private Projekte zweifel ich den Nutzen dennoch an. Ich glaube ich hatte noch nie ein Programm, das länger als 20 Sekunden kompiliert hat und das wahrscheinlich auch nur auf einem Prozessorkern.

edit: Obwohl ich muss zugeben, ich weiß nicht, wie lange es dauern würde, wenn jedes Mal die stdlib neu kompiliert werden müsste.


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 21:30, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Access Violation bei glewInit
BeitragVerfasst: Do Apr 21, 2011 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ich glaube ich hatte noch nie ein Programm, das länger als 20 Sekunden kompiliert hat und das wahrscheinlich auch nur auf einem Prozessorkern.

Ich weiß nicht was du für Projekte machst....aber wenn du am Bug suchen bist und immer wieder kleinere Änderungen machst geht dir das kompilieren schnell auf die nerven ;)
Die Hauptanwendung meiner Diplomarbeit braucht durchaus schon mal einige Minuten zum compilieren, wenn nur ein Kern verfügbar ist. Hängt aber auch stark vom Rechner und dem aktuellen Zustand des Festplattencaches ab. Das ganze ist zudem auch eine Qt-Anwendung, d.h. es gibt zusätzliche *.ui-Files die die GUI als XML beschreiben und natürlich müssen alle selbst geschriebenen Qt-Objekte nochmal durch den Meta-Object Compiler (MOC) der die Spracherweiterungen von Qt (*) in normalen C++-Code umwandelt.


(*) Signals und Slots sind toll :)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 17 Queries | GZIP : On ]