OpenGL

P

Peter Stoffer

Neues Mitglied
Thread Starter
Dabei seit
18.02.2004
Beiträge
15
Reaktionspunkte
0
Hallo zusammen

ich möchte beginnen, mit OpenGL zu programmieren. Ich habe ein C++-Tool erstellt, das GLUT-Framework importiert und wenig Code aus einem Beispiel abgeschrieben.
Beim Kompilieren erhalte ich jedoch diese Fehlermeldung:

ld: /Users/pstoffe/MyGlut/build/MyGlut.build/MyGlut.build/Objects-normal/ppc/main.o illegal reference to symbol: _glBegin defined in indirectly referenced dynamic library /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib

Was mache ich falsch?

Vielen Dank für eure Hilfe
 
Wie sieht denn der Code aus?
 
Das Programm soll ein weisses Viereck auf schwarzem Hintergrund anzeigen:

main.cpp:

#include <OpenGL/gl.h>
#include <GLUT/glut.h>

void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();
glFlush ();
}

void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
 
Hmm. Also bei mir funktioniert es so wie es soll.

Mache mal folgendes:

1. XCode starten.
2. Neues C++-Tool als Projekt
3. Links im Dateibaum, das Projekt "aufklappen", external Frameworks, dort das GLUT und das OpenGL FrameWork einfügen. Also dort wo auch libstc++ drinnen ist.
4. Dein Code einfügen
5. Ausführen
 
Ich habe das Problem lösen können: Ich habe vergessen, OpenGL.framework zu importieren. Ausserdem musste ich libobjc.A.dylib importieren (keine Ahnung warum...).
 
Wie macht man das jetzt?

Hi,

also ich hab glaube ich ein ähnliches Problem. Ich möchte einfach ein Code Stück in C mit der OpenGL Bibliothek (GLUT) compilieren und ausführen ohne XCode benutzten zu müssen, also einfach mit dem Terminal und gcc.

Ich weiss, dass die Zeilen

#include <OpenGl/gl.h>
#include <OpenGl/glu.h>

eigentlich wegfallen können, da ja schon GLUT importiert wird. Aber hab es sicherheitshalber gemacht. Das Programm lässt sich mit gcc fehlerfrei übersetzen aber nicht linken. Ich erhalte folgende Fehlermeldung:

ld: warning prebinding disabled because of undefined symbols
ld: Undefined symbols:
_glBegin
_glClear
_glClearColor
_glColor3f
_glEnd
_glFlush
...
....

Muss ich auch irgendwie das OpenGl Framework unter MAC einbinden...?

Oder wie läuft das jetzt mit OpenGL unter MAC, ohne irgendeine IDE???


Der Code sieht folgendermaßen aus:

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

#include <OpenGl/gl.h>
#include <OpenGl/glu.h>

#include <GLUT/glut.h>


void display(void)
{

/* clear all pixels */
glClear(GL_COLOR_BUFFER_BIT);

/* draw white polygon (rectangle) with corners at
* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/

glColor3f(1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f(0.25, 0.25, 0.0);
glVertex3f(0.75, 0.25, 0.0);
glVertex3f(0.75, 0.75, 0.0);
glVertex3f(0.25, 0.75, 0.0);
glEnd();


/* don't wait!
* start processing buffered OpenGL routines
*/

glFlush();
}

void init (void)
{

/* select clearing (background) color */
glClearColor(0.0, 0.0, 0.0, 0.0);


/*initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

/* Declare initial window size, position, and display mode
* (single buffer and RGBA). Open Window with "hello"
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/

int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100,100);
glutCreateWindow("hello");
init();
glutDisplayFunc(display);
glutMainLoop();

return 0;
}



Vielen Dank für die Hilfe.

P.S.: Ich nutze Mac OS X Panther 10.3.3
 
-framework GLUT -framework OpenGL

anhängen an den Compilerbefehl. Also z.B. gcc -o Programm main.cpp -framework GLUT -framework OpenGL

Dann musst zu aber glaube ich noch -Wl,/usr/lib/libobjc.A.dylib ranhängen. Keine Ahnung warum.

Also:

PHP:
gcc -o Programm main.cpp -framework GLUT -framework OpenGL -Wl,/usr/lib/libobjc.A.dylib
 
Danke vielmals, Nuke!

so funktioniert.

komisch nur, dass das kompilieren so lange dauert, bei so einem kleinen Programm!!!
 
Zurück
Oben Unten