PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was mache ich falsch???



Avirell
18-05-2003, 06:24
Tach

Wenn ich folgendes Programm kompillieren will:



#include <stdio.h>
#include <stdlib.h>

#include <GL/glut.h>

void DrawScene(void)
{
//Hintergrundfarbe setzen (dunkles Rot)
glClearColor (0.5, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

// Farbe des 5-Ecks setzen, (blau)
glColor3f(0.0, 0.1, 1.0);

//Polygonzug des 5-Ecks
glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f( 0.5, 0.5);
glVertex2f( 0.8, 0.0);
glVertex2f( 0.5, -0.5);
glEnd();

//vorangehende GL-Befehle zeichnen
glFlush();
}


int main(int argc, char *argv[])
{
//GLUT initialisieren, Fenster setzen
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);



// Callback-Funktion zum Zeichnen des GL-Objektes setzen
glutDisplayFunc(DrawScene);
// Hauptschleife
glutMainLoop();

return EXIT_SUCCESS;
}


kommt immer folgender Fehler:

main.cpp: In function `int main(int, char**)':
main.cpp:33: error: invalid conversion from `int' to `int*'

Was ist in dem code falsch??? ICh hab schon n bisschen rumprobiert, aber nix hat geklappt!

tuxipuxi
18-05-2003, 09:08
hi,

aus deinem code kann ich nicht sehen, welche zeile 33 ist( wegen deiner leerzeilen ), nehme aber an das du diese zeile meinst:



glutInit(&argc, argv);


hast du es mal ohne & vor dem argc probiert?

Avirell
18-05-2003, 09:11
Hab ich, dann kommt das gleiche

tuxipuxi
18-05-2003, 09:15
verstehe ich nicht.. also wie du argv uebergibst stimmt es.

versuche mal


initGlut( *argc,argv );


edit: schwachsinnsidee.. duerfte eigentlich nicht klappen :)

anda_skoa
18-05-2003, 12:01
Hmm, der ursprüngliche Code sieht ansich korrekt aus.

Probier mal argc zwischen zu speichern



int main(int argc, char* argv[])
{
int c = argc;
glutInit(&c, argv);
}


Ciao,
_

Avirell
18-05-2003, 12:18
Dann kommt das:


/tmp/cc4IEmVG.o(.text+0x12): In function `DrawScene()':
: undefined reference to `glClearColor'
/tmp/cc4IEmVG.o(.text+0x22): In function `DrawScene()':
: undefined reference to `glClear'
/tmp/cc4IEmVG.o(.text+0x39): In function `DrawScene()':
: undefined reference to `glColor3f'
/tmp/cc4IEmVG.o(.text+0x46): In function `DrawScene()':
: undefined reference to `glBegin'
/tmp/cc4IEmVG.o(.text+0x5b): In function `DrawScene()':
: undefined reference to `glVertex2f'
/tmp/cc4IEmVG.o(.text+0x70): In function `DrawScene()':
: undefined reference to `glVertex2f'
/tmp/cc4IEmVG.o(.text+0x85): In function `DrawScene()':
: undefined reference to `glVertex2f'
/tmp/cc4IEmVG.o(.text+0x97): In function `DrawScene()':
: undefined reference to `glVertex2f'
/tmp/cc4IEmVG.o(.text+0xac): In function `DrawScene()':
: undefined reference to `glVertex2f'
/tmp/cc4IEmVG.o(.text+0xb4): In function `DrawScene()':
: undefined reference to `glEnd'
/tmp/cc4IEmVG.o(.text+0xb9): In function `DrawScene()':
: undefined reference to `glFlush'
/tmp/cc4IEmVG.o(.text+0xe1): In function `main':
: undefined reference to `glutInit'
/tmp/cc4IEmVG.o(.text+0xee): In function `main':
: undefined reference to `glutInitDisplayMode'
/tmp/cc4IEmVG.o(.text+0x103): In function `main':
: undefined reference to `glutInitWindowSize'
/tmp/cc4IEmVG.o(.text+0x112): In function `main':
: undefined reference to `glutInitWindowPosition'
/tmp/cc4IEmVG.o(.text+0x122): In function `main':
: undefined reference to `glutCreateWindow'
/tmp/cc4IEmVG.o(.text+0x132): In function `main':
: undefined reference to `glutDisplayFunc'
/tmp/cc4IEmVG.o(.text+0x13a): In function `main':
: undefined reference to `glutMainLoop'

tuxipuxi
18-05-2003, 12:24
das hoert sich nach einer falschen compileanweisung an.
mit welchen libs laesst du es kompilieren? paste mal

anda_skoa
18-05-2003, 12:24
"undefined reference" ist ein Linkerfehler

Wahrscheinlich vergessen gegen glut zu linken

Ciao,
_

Avirell
18-05-2003, 17:24
ähm...
Könntet ihr das mit dem linken mal genauer erklären? Irgendwie versteh ich das nicht ganz... wie "gegen glut linken"?
Hab davon noch nicht ganz soviel ahnung, da ich erst seit relativ kurzer Zeit programmiere...

anda_skoa
18-05-2003, 17:27
Den GL Code von oben wirst du ja nicht aus dem Hut gezauert haben :)

In einem Tutorial steht normalerweise auch, wie der Compileraufruf auszusehen hat.

Ich schätze du musst mit libGL und libglut linken

#> gcc -o program source.c -lglut -lGL

Ciao,
_

Avirell
18-05-2003, 17:58
Achsoooooo
Ich zitiere mal das Tut:


gcc -I. -c HelloOpenGL.c

gcc -o HelloOpenGL HelloOpenGL.o \
-IGL -Iglut -IGLU
Was davon muss ich jetzt eingeben?

tuxipuxi
18-05-2003, 18:06
hi,

also stueck fuer stueck:

gcc ist ja der aufruf des c-compilers.

als naechstes gibst du dein gewuenschen outputname an:

-o HelloOpenGl

dann deine sourcedateien:

HelloOpenGl.c

dann musst du dem compiler verraten wo deine headerdateien liegen

-I/usr/X11R6/include

und dann noch gegen die libs linken

-lGL -lglut

die reihenfolge muss nicht eingehalten werden.

also gcc -o HelloOpenGl HelloOpenGl.c -I/usr/X11R6/include -lGL -lglut

gruss,

tuxipuxi.

Avirell
18-05-2003, 18:21
Jetzt funktionierts, vielen Dank! :D