"wxImage _framebuffer" und wx Widgets

slackfr

slackfr

Aktives Mitglied
Thread Starter
Dabei seit
20.02.2006
Beiträge
425
Reaktionspunkte
1
Hallo,
habe schon etliches versucht, um bei meinem problem mir selbst auf die sprümge zu helfen, jedoch stehts ohne erfolg.

umgebung

Uni->projeckt->3d-visualisiurung->implimentierung von 3d-objeckten
programiersprache c++, benutzte bibliotheken von wxWindows (2.6.2 angeblich) mit OpenGL

fortschritte:
compilierung von wxWidgets mit hilfe von darwinports, anschlißend nochmaliges compilieren manuell mit "--with-opengl"

problem:
bei der compilierung des programms des projeckts wird auf meinem mac stehts angezeigt:
Code:
make gdvvk
Updating dependency file for Vector3d.cpp
Updating dependency file for MyCanvasGL.cpp
Updating dependency file for MyCanvas.cpp
Updating dependency file for CanvasGL.cpp
Updating dependency file for Canvas.cpp
Updating dependency file for GDVFrame.cpp
Updating dependency file for gdvvk.cpp
g++ -Wall `wx-config --cppflags` -g -DDEBUG  gdvvk.cpp -c -o build/gdvvk.o
g++ -Wall `wx-config --cppflags` -g -DDEBUG  GDVFrame.cpp -c -o build/GDVFrame.o
[B]Canvas.h:28: error: field '_frameBuffer' has incomplete type[/B]
make: *** [build/GDVFrame.o] Error 1

bei der nachfrage beim lektor, meint dieser, das das wxwidgets nicht mit allen nötigen optionen compiliert wurde, jedoch welche das sind, weiß er nicht, da er die (linux-)rechner in der uni nicht selbst aufgesetzt hatte

hier könnt ihr die header datei einsehen wo der fehler auftritt: Canvas.h

wäre über jeden tip dankbar

p.s. kann es sein, das wenn ich wxwidgets nochamls compiliert hatte die immer noch die alte bibliothek verwendet wird? beim compilieren bin ich so vorgegangen:
Code:
mkdir osx-build
cd osx-build
../configure --with-opnegl
make
sudo make install
 
#include <wx/image.h>

p.s.:
./configure --with-opengl
 
Zuletzt bearbeitet:
besten dank :) :) :)

warum wusste das der prof nicht, bzw warum hat es bei den anderen anscheinend auf den linux rechnern so funktioniert?

jetzt bekomme ich aber weiter das problem:
Code:
g++ -Wall `wx-config --cppflags` -g -DDEBUG  gdvvk.cpp -c -o build/gdvvk.o
g++ -Wall `wx-config --cppflags` -g -DDEBUG  GDVFrame.cpp -c -o build/GDVFrame.o
g++ -Wall `wx-config --cppflags` -g -DDEBUG  Canvas.cpp -c -o build/Canvas.o
[B]Canvas.cpp: In member function 'void Canvas::onSize(wxSizeEvent&)':
Canvas.cpp:25: error: 'cout' is not a member of 'std'
Canvas.cpp:25: error: 'endl' is not a member of 'std'
make: *** [build/Canvas.o] Error 1[/B]

die dazu gehörige datei ist hier: Canves.cpp

bzw was sagen mir die fehler eigentlich?
 
#include <iostream>

slackfr schrieb:
bzw was sagen mir die fehler eigentlich?

'cout' is not a member of 'std' heisst, daß aus Sicht des Compilers kein Typ und keine Funktion namens cout im Namesraum std exisitiert. Weil sie noch nicht deklariert wurden.

Die Gründe, aus denen der Code bei den anderen kompilierte könnten sein, daß die anderen eine wxWidgets-Version verwenden, in der <wx/image.h> noch zu den "häufig" verwendeten #includes gehörte. Oder <wx/image.h> wurde unsaubererweise ausserhalb des Canvas.h-Headers vorher #include-d.

p.s.:
Compiler lügen nicht, sind aber verdammt kurzsichtig... ;)
 
Zuletzt bearbeitet:
eh man, du bist einfach klasse :)

anscheid hat der prof aber inseinem basis paket noch einige anderer fehler drine, kannst du mir da vielleicht auch weiter helfen?

Code:
...
g++ -Wall `wx-config --cppflags` -g -DDEBUG  Canvas.cpp -c -o build/Canvas.o
g++ -Wall `wx-config --cppflags` -g -DDEBUG  CanvasGL.cpp -c -o build/CanvasGL.o
[B]CanvasGL.cpp: In member function 'GLuint CanvasGL::loadTexture(const wxString&)':
CanvasGL.cpp:115: error: variable 'wxImage img' has initializer but incomplete type[/B]
make: *** [build/CanvasGL.o] Error 1

hier die CanvasGL.cpp

p.s.

habe dem prof gerade eine mail geschrieben scherzens halber, mal sehen was er dazu sagt das da diese zeilen gefehlt haben...obwohl er doch fest der meinung war, dass das wx falsch compiliert sei
 
ich glaub ich bekomme den dreh langsam selber raus ;)...fehlt wieder der wx/image.h
 
Das wird schon.

Noch ein Tipp (- den ich hier im Forum bekam - :) ): Nachher das Binary mit
Code:
`wx-config --rezflags` <binary name>
nachbehandeln. Dann wird es eine "richtige" App zum Anklicken.

Noch ein Tipp: Ich habe ein sehr merkwürdiges Fehlverhalten bei GUI-Elementen unter wxMac 2.6.2 festgestellt, in dem Sinne daß einige Elemente (Grids, Buttons usw.) einfach unsinnigerweise nicht auf Anklicken/Mauseingaben reagieren. Wenn das passiert, achte darauf, dass das GUI-Element erst nach dem beinhaltenden Sizer erzeugt wird. (siehe hier)

Viel Spass noch,

Kay
 
Zuletzt bearbeitet:
so, nach dem er nun alles ordnungs gemäß compiliert hatte, ruft er zum schluß des "make-vorgangs" noch "/usr/bin/ld" auf (soweit ich das versanden habe... dabei bekomme ich eine fehler:

Code:
g++ -Wall `wx-config --cppflags` -g -DDEBUG  Vector3d.cpp -c -o build/Vector3d.o
g++ build/gdvvk.o build/GDVFrame.o build/Canvas.o build/CanvasGL.o build/MyCanvas.o build/MyCanvasGL.o build/Vector3d.o `wx-config --libs --gl-libs` -lGLEW -o gdvvk
/usr/bin/ld: Undefined symbols:
_glBindTexture
_glGenTextures
_glPixelStorei
_glTexParameteri
_glViewport
_gluBuild2DMipmaps
_glBegin
_glClear
_glColor3f
_glEnable
_glEnd
_glFlush
_glLoadIdentity
_glMatrixMode
_glTexCoord2f
_glTexEnvi
_glVertex3f
_gluPerspective
collect2: ld returned 1 exit status
make: *** [gdvvk] Error 1

was bedeutet dieser, woran liegt es?
 
Es fehlt das OpenGL-Framework, d. h. dem Linker wurden die Bibliotheken OpenGL und GL-UtilityToolkit nicht zum Linken mitübergeben.

Das Makefile macht in der letzten Regel den Aufruf
Code:
`wx-config --libs --gl-libs`
, der die nötigen Linker-Flags hinzufügt.

Ersetze im Makefile `wx-config --libs --gl-libs` durch
Code:
`wx-config --libs` -framework OpenGL `wx-config --gl-libs`
(Kurz gesagt: es fehlt "-framework OpenGL".)

Was mich stutzig macht ist das -lGLEW, eine "libGLEW.a" o.ä. ist mir unbekannt... :-/
 
Zuletzt bearbeitet:
an welcher stelle der make-file müsste ich dies einfügen?

hier ist die makefile aus dem basispaket des profs: makefile


oder muss ich noch ein zusätzliches opengl-paket installieren, abgesehen von dem was ich bei wx-compilieren mit eingebunden habe?
 
hab mir gerade die fehler meldung bzgl deiner antwort angeschaut..ist dort das "wx-config --libs" nicht schon mit dabei?
 
Zeile 6: Mache aus
Code:
LDFLAGS= `wx-config --libs --gl-libs` -lGLEW
Code:
LDFLAGS=`wx-config --libs` -framework OpenGL `wx-config --gl-libs` -lGLEW

Sollte klappen. ;)

Es scheint tatsächlich so, daß da ein Erweiterungspaket namens "OpenGL Extension Wrapper" im Spiel ist. Gibt es glücklicherweise auch für den Mac: http://glew.sourceforge.net/. Aber OpenGL ist beim Mac dabei.

`wx-config --libs` wirft beim Mac (und anderen Plattformen) die nötigen Libs raus, um ein lauffähiges binary zu bauen. `wx-config --gl-libs` wirft beim Mac nur die "libwx_macu_gl-2.6.a" heraus; es fehlt aber das OpenGL-Framework. Bei anderen Plattformen reicht der Aufruf `wx-config --gl-libs` aus, weil dort wahrscheinlich korrekterweise auch die Flags "-lgl -lglu" mitkommen.
 
Zuletzt bearbeitet:
kay du bist der beste :)

musste nur noch "-lGLEW" anhängen, damit er glew richtig verarbeitet..nun funktioniert :)
 
Zurück
Oben Unten