PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGl-Kompilierungs-Problem



BLUESCREEN3D
23-03-2003, 16:48
ich will von dem -> http://www.heise.de/ix/artikel/1999/12/160/ artikel diese -> http://www.heise.de/ix/artikel/1999/12/160/02.shtml datei kompilieren

wie schon am anfang des listings steht soll das mit "gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib" gehen

ich kriege aber immer folgenden fehler:

$ gcc sample1.c -lMesaGLU -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lMesaGLU
collect2: ld returned 1 exit status

wenn ich dann mal den fehlererzeugenden parameter weglasse kommen andere fehler:

$ gcc sample1.c -lMesaGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lMesaGL
collect2: ld returned 1 exit status
$ gcc sample1.c -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lXext
collect2: ld returned 1 exit status
$ gcc sample1.c -lX11 -lm -lglut -lXi -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status
$ gcc sample1.c -lm -lglut -lXi -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lXi
collect2: ld returned 1 exit status
$ gcc sample1.c -lm -lglut -lXmu -B/usr/X11/lib
/usr/local/bin/ld: cannot find -lXmu
collect2: ld returned 1 exit status

ich habe mir also mal von http://www.mesa3d.org/ die mesalib runtergeladen und mit "make linux" kompiliert/installiert

aber das hat nichts geholfen :(

anda_skoa
23-03-2003, 19:02
Such die Bibliotheken mal.
lib dann der Name dann so
für MesaGLU suchst du die Datei libMesaGLU.so

Meine Vermutung ist, dass es nicht -B/usr/X11/lib sondern -L/usr/X11/lib heißen muss.

Ciao,
_

BLUESCREEN3D
23-03-2003, 19:28
libMesaGLU.so hab ich garnicht :confused:

anda_skoa
23-03-2003, 20:05
Vielleicht eine libGLU

Ciao,
_

BLUESCREEN3D
23-03-2003, 21:09
$ locate libglu
/usr/lib/transgaming/winex/lib/libglu32.so
/usr/lib/libglut.so.3
/usr/lib/libglut.so.3.7
/usr/lib/libglut.so
/usr/local/lib/libglu32.so

was sagt mir das jetzt?

(habe vor dem kompilieren, weil mir das auch fehlte, glut und glut-devel installiert)

ReSeT
24-03-2003, 08:51
Meine Vermutung ist, dass es nicht -B/usr/X11/lib sondern -L/usr/X11/lib heißen muss.

Das denke ich auch, darüberhinaus solltest du mal alle Libraries in /etc/ld.so.conf eintragen und ein ldconfig laufen lassen. Vielleicht noch nen symbolischen Link von /usr/local/lib nach /usr/lib, dann sollte es eigentlich laufen.

Für OpenGL Aktionen kann ich übrigens wärmstens Debian empfehlen, da stimmen von vornherein alle Pfade, und du musst Dich mit sowas nicht mehr rumärgern.

Dann gibt es noch ein paar lohnenswerte Tutorials auf

http://www.gametutorials.com/Tutorials/OpenGL/OpenGL_Pg1.htm
http://www.gamedev.net/reference/list.asp?categoryid=31

GreetZ

ReSeT

BLUESCREEN3D
24-03-2003, 13:09
darüberhinaus solltest du mal alle Libraries in /etc/ld.so.conf eintragen
welche "alle"? alle auf meiner festplatte?
woran erkenne ich, dass eine datei eine library ist?


Für OpenGL Aktionen kann ich übrigens wärmstens Debian empfehlen, da stimmen von vornherein alle Pfade, und du musst Dich mit sowas nicht mehr rumärgern.
dann müsste ich ja noch neue partitionen usw. erstellen - nicht so gut... es muss auch mit red hat gehen

die links sehen gut aus und die nehe-tutorials wollte ich sowieso nehmen - teilweise übersetzt gibt es die übrigens bei www.codeworx.org


Einmal schwarzen Tee mit Milch und Zucker bitte!
rofl - genau das trinke ich jetzt

anda_skoa
24-03-2003, 17:06
Original geschrieben von BLUESCREEN3D
welche "alle"? alle auf meiner festplatte?
woran erkenne ich, dass eine datei eine library ist?


Nur Verzeichnisse, /usr/lib ist normalerweise nicht nötig, das ist der Standardpfad.

Ciao,
_

BLUESCREEN3D
24-03-2003, 17:50
meine /etc/ld.so.conf:

/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/qt-3.0.5/lib
/usr/lib/sane
/usr/local/lib
/usr/lib <<< ich hab /usr/lib einfach trotzdem mal hinzugefügt

/home/user/pkgs/Mesa-5.0/lib <<< mesa 5.0 hab ich auch mal dazugepackt, obwohl während dessen installation nur was davon stand, dass ich das zu LD_LIBRARY_PATH hinzufügen soll, also hab ich meine ~/.bash_profile so erweitert:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/pkgs/Mesa-5.0/lib
export LD_LIBRARY_PATH

/lib <<< hab ich auch mal dazugepackt, weil .so-dateien drin sind

--------------------

ldconfig hab ich auch gemacht, aber es geht irgendwie trotzdem nicht



wenn die fehlermeldung "/usr/local/bin/ld: cannot find -lMesaGLU" ist, dann sollte ich doch wenigstens irgendwie eine mesaglu-datei haben, oder?

$ locate mesaglu
/home/user/pkgs/Mesa-5.0/si-glu/mesaglu.opt

^^die datei^^ ist damit wohl nicht gemeint...

woher kriege ich diese mesaglu-datei?



edit:
hab mesa nochmal kompiliert, und diesmal nicht das vergessen:
# cp -r include/GL /usr/include
# cp -pd lib/* /usr/lib

hat aber auch nichts gebracht...

ReSeT
25-03-2003, 08:01
Vielleicht sollten wir mal von vorne anfangen:

Was für ein System hast Du denn?
Welche Graka, welche Treiber?

Musst Du Mesa benutzen? Ich hatte viele Probleme damit.

Normalerweise reicht zum Kompilieren von OpenGL Programmen folgendes Makefile:




CC = g++

TARGET = engine

$(TARGET): main.o init.o camera.o
$(CC) -o $(TARGET) main.o init.o camera.o `sdl-config --libs` -lGL -lGLU -lm

main.o: main.cpp main.h
$(CC) -c main.cpp `sdl-config --cflags`

init.o: init.cpp main.h
$(CC) -c init.cpp `sdl-config --cflags`

camera.o: camera.cpp main.h
${CC} -c camera.cpp `sdl-config --cflags`

clean:
rm -f $(TARGET) main.o init.o core camera.o


Ist nur ein Beispiel, die SDL-Geschichten kannst Du weglassen, wenn Du sie nicht brauchst,
die einzelnen Files sind nur exemplarisch. Im Prinzip ist das mein Standard Makefile für solche Sachen.

BLUESCREEN3D
25-03-2003, 14:50
Red Hat 8.0, AMD Athlon XP 2100+, Asus A7V8X+, 768MB DDR333, GeForce 4 Ti 4400 128MB

NVIDIA_GLX-1.0-4191.i386.rpm
NVIDIA_kernel-1.0-4191.rh80up.i586.rpm

keine ahnung, ob ich mesa benutzen muss - ich gehe einfach davon aus, dass ich das brauche, wenn ich das >>> http://www.heise.de/ix/artikel/1999/12/160/02.shtml <<< kompilieren will, oder geht das auch ohne mesa?

wozu son makefile gut sein soll, weiss ich noch nicht :rolleyes:

anda_skoa
25-03-2003, 15:35
Ich glaube du brauchst kein Mesa.

Probier mal die Linker Zeile von ReSet (ohne das sdl-config --libs)

Selbst wenn das System nur Softwarerendering mit MESA macht, sollten das links zu den "echten" Namen sein (libGL.so, libGLUT.so)

Ciao,
_

BLUESCREEN3D
25-03-2003, 21:49
Probier mal die Linker Zeile von ReSet (ohne das sdl-config --libs)

Selbst wenn das System nur Softwarerendering mit MESA macht, sollten das links zu den "echten" Namen sein (libGL.so, libGLUT.so)

"die linker zeile von reset" interpretiere ich mal so (wusste nicht so wirklich was genau gemeint ist):
$ gcc sample1.c -lGL -lGLU -lm

funzrt aber nicht - weiss wohl wirklich nicht, wie es gemint ist:
/tmp/cc4ujYdc.o: In function `Key':
/tmp/cc4ujYdc.o(.text+0x41f): undefined reference to `glutPostRedisplay'
/tmp/cc4ujYdc.o: In function `SpecialKey':
/tmp/cc4ujYdc.o(.text+0x4ab): undefined reference to `glutPostRedisplay'
/tmp/cc4ujYdc.o: In function `Display':
/tmp/cc4ujYdc.o(.text+0x52f): undefined reference to `glutSwapBuffers'
/tmp/cc4ujYdc.o: In function `main':
/tmp/cc4ujYdc.o(.text+0x551): undefined reference to `glutInit'
/tmp/cc4ujYdc.o(.text+0x560): undefined reference to `glutInitWindowPosition'
/tmp/cc4ujYdc.o(.text+0x575): undefined reference to `glutInitWindowSize'
/tmp/cc4ujYdc.o(.text+0x582): undefined reference to `glutInitDisplayMode'
/tmp/cc4ujYdc.o(.text+0x592): undefined reference to `glutCreateWindow'
/tmp/cc4ujYdc.o(.text+0x5b5): undefined reference to `glutReshapeFunc'
/tmp/cc4ujYdc.o(.text+0x5c5): undefined reference to `glutKeyboardFunc'
/tmp/cc4ujYdc.o(.text+0x5d5): undefined reference to `glutSpecialFunc'
/tmp/cc4ujYdc.o(.text+0x5e5): undefined reference to `glutDisplayFunc'
/tmp/cc4ujYdc.o(.text+0x5ed): undefined reference to `glutMainLoop'
collect2: ld returned 1 exit status

und mit den "echten" namen, ist das so gemeint???
$ gcc sample1.c -llibGL.so -llibGLU.so -lm
/usr/local/bin/ld: cannot find -llibGL.so
collect2: ld returned 1 exit status

wohl nicht... ich kapier garnichts mehr :confused:


kann mir nicht jemand ne gute c++-ide für linux empfehlen?

(btw: kann einer von euch mal versuchen, dass zu kompilieren?)

anda_skoa
25-03-2003, 22:15
Original geschrieben von BLUESCREEN3D
"die linker zeile von reset" interpretiere ich mal so (wusste nicht so wirklich was genau gemeint ist):
$ gcc sample1.c -lGL -lGLU -lm


Ja, das war die Idee.
Hat nicht geklappt.



und mit den "echten" namen, ist das so gemeint???
$ gcc sample1.c -llibGL.so -llibGLU.so -lm
/usr/local/bin/ld: cannot find -llibGL.so
collect2: ld returned 1 exit status


Nein, das bezog sich auf die MESA Sache.
Selbst wenn die MESA Implementierung der GL Lib libMesaGL heißt, ist sie sicher als Link auch unter dem "echten" Namen der GL Lib, nämlich libGL bekannt.



(btw: kann einer von euch mal versuchen, dass zu kompilieren?)

Ja, gute Idee, werd ich morgen Vormittag machen.

Ciao,
_

anda_skoa
26-03-2003, 09:56
Ok, ich habs ausprobiert.

Musste noch meine glut-dev Pakete installieren.

#> gcc -Wall gltest.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11R6/lib -o gltest

Hat bei mir funktioniert, gibt noch ei, zwei Warnings

#> gcc -Wall gltest.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -L/usr/X11R6/lib -o gltest

geht bei mir ohne Warnings, nachdem ich noch return 0 am Ende von main() eingefügt haben.

Ciao,
_

BLUESCREEN3D
26-03-2003, 14:03
welche glut-dev pakete sind das genau?

ich habe eben nochmal andere runtergeladen "Mesa-glut" und "Mesa-glut-devel", die haben aber Konfilkte mit denen:

$ rpm -qa | grep glut
glut-3.7-12
glut-devel-3.7-12

welche sind nun die richtigen?

anda_skoa
26-03-2003, 14:22
Die ohne Mesa.

Mesa brauchst du nicht, da du Hardwarebeschleunigtes GL hast.

Bei mir hei0en die Pakete anders (Debian), aber es sind auch nicht die Mesa Pakete, weil ich auch Hardware 3D Support habe

Ciao,
_

BLUESCREEN3D
26-03-2003, 16:29
$ gcc -Wall sample1.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -B/usr/X11R6/lib -o sample1
sample1.c: In function `Key':
sample1.c:76: warning: implicit declaration of function `exit'
sample1.c: In function `main':
sample1.c:155: warning: control reaches end of non-void function
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXBindChannelToWindowSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXQueryChannelDeltasSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXChannelRectSyncSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXChannelRectSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXQueryChannelRectSGIX'
collect2: ld returned 1 exit status



$ gcc -Wall sample1.c -lGLU -lGL -lXext -lX11 -lm -lglut -lXi -lXmu -L/usr/X11R6/lib -o sample1
sample1.c: In function `Key':
sample1.c:76: warning: implicit declaration of function `exit'
sample1.c: In function `main':
sample1.c:155: warning: control reaches end of non-void function
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXBindChannelToWindowSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXQueryChannelDeltasSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXChannelRectSyncSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXChannelRectSGIX'
/usr/lib/gcc-lib/i386-redhat-linux/3.2/../../../libglut.so: undefined reference to `glXQueryChannelRectSGIX'
collect2: ld returned 1 exit status



der fehler scheint wohl bei der libglut.so zu liegen - was kann ich dagegen tun?