1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

OpenGL

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von Peter Stoffer, 17.03.2004.

  1. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Mitglied seit:
    18.02.2004
    Beiträge:
    15
    Zustimmungen:
    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
     
  2. -Nuke-

    -Nuke- MacUser Mitglied

    Mitglied seit:
    13.09.2003
    Beiträge:
    2.135
    Zustimmungen:
    15
    Wie sieht denn der Code aus?
     
  3. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Mitglied seit:
    18.02.2004
    Beiträge:
    15
    Zustimmungen:
    0
    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;
    }
     
  4. -Nuke-

    -Nuke- MacUser Mitglied

    Mitglied seit:
    13.09.2003
    Beiträge:
    2.135
    Zustimmungen:
    15
    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
     
  5. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Mitglied seit:
    18.02.2004
    Beiträge:
    15
    Zustimmungen:
    0
    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...).
     
  6. Corleone

    Corleone MacUser Mitglied

    Mitglied seit:
    04.05.2003
    Beiträge:
    67
    Zustimmungen:
    0
    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
     
  7. -Nuke-

    -Nuke- MacUser Mitglied

    Mitglied seit:
    13.09.2003
    Beiträge:
    2.135
    Zustimmungen:
    15
    -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
     
  8. Corleone

    Corleone MacUser Mitglied

    Mitglied seit:
    04.05.2003
    Beiträge:
    67
    Zustimmungen:
    0
    Danke vielmals, Nuke!

    so funktioniert.

    komisch nur, dass das kompilieren so lange dauert, bei so einem kleinen Programm!!!
     
Die Seite wird geladen...