Forum: PC-Programmierung undefined reference to gtk_gl_init


von KidMoritz (Gast)


Lesenswert?

Hallo Spezialisten,

ich spiele seit kurzem etwas mit dem GTK herum.
Ich habe nun CodeBeispiele gefunden, welche OpenGL eingebunden haben.
Ich habe alle Header, welche in diesem Code angegeben sind eingebunden.

Leider schlaegt die GL-Initialisierung fehl.
Die Initialisierung erfolgt ueber:
1
 gtk_gl_init (int    *argc,char ***argv);

Doch leider bekomme ich immer wieder die Meldung:
1
undefined reference to gtk_gl_init

Ich programmiere in C auf Windows mit Code::Blocks


Kann jemand helfen.

KidMoritz

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die Fehlermeldung ist eine Linkerfehlermeldung, die besagt, daß Du die 
Library, die diese Funktion enthält, nicht zu Deinem Projekt dazulinkst.

von KidMoritz (Gast)


Lesenswert?

Wenn ich mich eben richtig informiert habe, haette ich da "glut" als 
opengl lib. Wenn ich das richtig verstehe.
glut wird, wie ich gelesen habe, aber nicht weiterentwickelt.

Welche lib kann ich denn da noch verwenden?

von Jean G. (chivas)


Lesenswert?

GLUT wird zwar nicht mehr weiterentwickelt, eignet sich aber durchaus 
noch zum Erlernen der OpenGL. Ein Großteil der Dokumentation und 
öffentlich zugänglichen Code Beispiele, wie deins wahrscheinlich auch, 
basiert ohnehin auf der 1er und 2er Version von OpenGL.
Will man State of the Art und hierbei insbesondere größere Projekte 
programmieren, greift man in dem Fall auf die nativen Window Manager 
zurück, also XGL und WGL beispielsweise.
Gerade in Bezug auf GTK könntest du dir noch die GTK GL Extension 
(http://projects.gnome.org/gtkglext/";, GtkGlExt googlen) anschauen. 
Diese API wird meines Wissens nach auch noch aktuell weiterentwickelt 
und ist zudem eng mit GTK verknüpft. Dafür gibt es auch gute 
Codebeispiele, die einen den Einstieg erleichtern.

von KidMoritz (Gast)


Lesenswert?

Hallo Jean G.

die ganzen Dateien der GtkGlExt habe ich in die zugehoerigen Ordner von 
Code::Blocks kopiert.
Reichen diese aus um OpenGl nutzen zu koennen?

In den Linkersettings habe ich den Pfad fuer die Glut32.lib angegeben.

Aber das scheint noch nicht zu reichen.
Wie kann ich herrausfinden, welche lib mir die Funktionen bereitstellt, 
welche ich brauche?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das sollte eigentlich in der Dokumentation der Funktionen stehen. 
Ansonsten wirst Du Dir die Libraries ansehen müssen, bei MS-Compilern 
sollte das mit dumpbin gehen.

von KidMoritz (Gast)


Lesenswert?

So nun funktioniert es. Ich denke, dass ich die GTK GL Extension nun 
richtig eingebunden habe.
Da hatten noch einige Libraries gefehlt.

Fuer interessenten:

Die Funktion
1
gtk_gl_init
  ist zu finden in der

libgtkglext-win32-1.0.dll.a

Da ich Glut nicht brauche - Greife ich da auf die WGL/XGL zu???
In dem kleinen Beispiel ist die
1
#include <windows.h>
 eingebunden.

Waere ich plattformunabhaengig, wenn ich Glut oder auch z.B. Mesa 
verwenden wuerde?

Ist es ueberhaupt sinnvoll sich mit GTK auf diese Art der Fenster- und 
Grafikprogrammierung tiefergehend einzulassen?
Im Moment kann ich nur in C programmieren.


Danke und Gruss

von Jean G. (chivas)


Lesenswert?

>Waere ich plattformunabhaengig, wenn ich Glut oder auch z.B. Mesa
>verwenden wuerde?
>
>Ist es ueberhaupt sinnvoll sich mit GTK auf diese Art der Fenster- und
>Grafikprogrammierung tiefergehend einzulassen?
>Im Moment kann ich nur in C programmieren.

OpenGL ist per se plattformunabhängig. Problem ist die Verbindung 
zwischen OpenGL und dem zugrunde liegenden Betriebssystem. Hier nimmt 
dir GTK einiges an Arbeit ab, beispielsweise die Erstellung eines 
Renderkontexts oder auch Pufferverwaltung. GLUT ist ebenfalls 
plattformunabhängig (wobei der Begriff Plattformunabhängigkeit etwas 
irreführend ist), SDL ebenso. Wie sinnvoll das Ganze ist, hängt von 
deinem angestrebten Ziel ab bzw. was du programmieren möchtest.
Mit der GTK (GLUT/SDL/...) Variante kannst du ein sehr großes Spektrum 
abdecken, da die GtkGlExt sich eben nur um ein paar grundlegende Dinge 
kümmert und du danach ohnehin (etwas eingeschränkt) direkt die OpenGL 
Funktionen nutzt.
Für den Anfang kann man sich mit diesen APIs auf Monate beschäftigen und 
respektable Ergebnisse erzielen, dann bei Bedarf auf andere Varianten 
umsteigen (GLX, WGL, AGL ...). Sie erleichtern einen den Einstieg, da 
man sich ersteinmal nicht um die Verbindung zwischen OpenGL und 
Betriebssystem kümmern muss, sondern man sich mit der OpenGL und deren 
Mathematik auseinandersetzen kann.
Letztendlich hängt es von deinen Plänen ab.

>Da ich Glut nicht brauche - Greife ich da auf die WGL/XGL zu???
>In dem kleinen Beispiel ist die
>
>#include <windows.h>
>
>eingebunden.

WGL (Windows Graphics Library)

von KidMoritz (Gast)


Lesenswert?

Danke fuer deine umfangreiche Erlaeuterung zu diesem Thema.

>Wie sinnvoll das Ganze ist, hängt von
>deinem angestrebten Ziel ab bzw. was du programmieren möchtest.

Spieleprogrammierung wirds wohl eher nicht werden.
Bin mehr Technikversiert.
Maschinenbau-Bedienpanels/Visualisierung von 
Kenngroessen/Bildverarbeitung o.ae.so in diese Richtung moechte ich 
meine Reise antreten.
Wahrscheinlich gibt es fuer solche Anwendungen andere Moeglichkeiten, 
aber da habe ich bisher noch keinen Einblick.
Und einen HighEnd 3D Renderer braucht man da sicher auch nicht.
Evtl. hats du da noch paar Tipps oder Hinweise dazu.

Aber erstmal vielen Danke fuer deine Worte.

von Rolf Magnus (Gast)


Lesenswert?

KidMoritz schrieb:
> Danke fuer deine umfangreiche Erlaeuterung zu diesem Thema.
>
>>Wie sinnvoll das Ganze ist, hängt von
>>deinem angestrebten Ziel ab bzw. was du programmieren möchtest.
>
> Spieleprogrammierung wirds wohl eher nicht werden.
> Bin mehr Technikversiert.
> Maschinenbau-Bedienpanels/Visualisierung von
> Kenngroessen/Bildverarbeitung o.ae.so in diese Richtung moechte ich
> meine Reise antreten.

Ob du da wirklich mit OpenGL glücklich wirst, ist die Frage. OpenGL ist 
doch eher low-level. Für derartige Visualisierungen gibt es 
Bibliotheken, die die für sowas benötigte Funktionialität auf höherem 
Level zur Verfügung stellen. Die wiederum können dann intern auf 
low-level-Frameworks wie z.B. OpenGL aufsetzten.

von KidMoritz (Gast)


Lesenswert?

>Für derartige Visualisierungen gibt es
>Bibliotheken, die die für sowas benötigte Funktionialität auf höherem
>Level zur Verfügung stellen.

Welche Bibliotheken sind das.
Werden die von Windows schon bereitgestellt?
Oder meinst du MESA bzw. Cairo in der Art.
Oder sind die auch in GtkGlExt?

KidMoritz

von KidMoritz (Gast)


Lesenswert?

Ok.

Ich denke, dass ich es so weit verstanden habe.


>Für derartige Visualisierungen gibt es
>Bibliotheken, die die für sowas benötigte Funktionialität auf höherem
>Level zur Verfügung stellen. Die wiederum können dann intern auf
>low-level-Frameworks wie z.B. OpenGL aufsetzten.

Über die GtkGlExt (HighLevleBibliotheken) greife ich auf die LowLevel 
GrafikBibliotheken von OpenGl zu.


"GTK+ uses the Cairo drawing API" ist das das gleiche Prinzip?
HighLevel (GTK) -> LowLevel (Cairo)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.