Linker fejl : udefineret reference til symbol ‘glOrtho’

Jeg har installeret OpenGL-pakker i Ubuntu 13.04 ( *mesa-common-dev freeglut3-dev* ) og forsøgte at køre en prøve programmet.

#include "GL/freeglut.h"
#include "GL/gl.h"

/* display function - code from:
     http://fly.cc.fer.hr/~unreal/theredbook/chapter01.html
This is the actual usage of the OpenGL library. 
The following code is the same for any platform */
void renderFunction()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glBegin(GL_POLYGON);
        glVertex2f(-0.5, -0.5);
        glVertex2f(-0.5, 0.5);
        glVertex2f(0.5, 0.5);
        glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

/* Main method - main entry point of application
the freeglut library does the window creation work for us, 
regardless of the platform. */
int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(100,100);
    glutCreateWindow("OpenGL - First window demo");
    glutDisplayFunc(renderFunction);
    glutMainLoop();    
    return 0;
}

Dog, jeg er stødt på denne fejl, og du ikke vide, hvad de skal gøre af det.

[email protected]:~/Desktop/p1$ g++ p1.cpp -lglut
/usr/bin/ld: /tmp/ccgGdeR2.o: undefined reference to symbol 'glOrtho'
/usr/bin/ld: note: 'glOrtho' is defined in DSO /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status

Havde jeg et kig på

OpenGL hej.c undlader at bygge med CMake

som fejlen er den samme, men jeg er ikke bruger CMake

ER min kode forkert eller har jeg brug for at inkludere/ændre/justere nogle indstillinger?

Jeg nævnte dette site for installation og kode :

Oprettelse af et OpenGL udviklingsmiljø i Ubuntu Linux

OriginalForfatteren VedVals | 2013-07-20

2 svar

  1. 22

    Du har brug for at knytte OpenGL-biblioteket:

    g++ p1.cpp -lglut -lGL
    
    Jeg er ny til opengl-programmering, er der nogen metode til at automatisere processen eller jeg er nødt til at tilføje altid linker parametre, som er angivet ovenfor, for alle mine opengl-programmer? Jeg har nævnt det samme link, som på codeprojects til initialisering af mit system for opengl, og jeg bruger ubuntu 13.04.
    I linux, jeg var nødt til at tilføje “-lGLU”, ud over dem.

    OriginalForfatteren Matias Valdenegro

  2. 5

    Du ikke har knyttet OpenGL-lib, hvor glOrtho() er defineret. For at gøre det arbejde, udarbejde/link med g++ p1.cpp -lglut -lGL. Sind den rækkefølge, der forbinder libs, da det er vigtigt i ld (linker anvendes af g+). Den OVERFLOD bibliotek, afhænger af OpenGL, og så -lGL HAR AT gå efter -glut. Dette er fordi ld kun får én til at cykle gennem de biblioteker, og dermed hvis du har knyttet -lGL -lglut, referencer fra lglut at lGL vil ikke blive defineret, således at foretage en sammenkædning fejl. Sorry for sådan et langt svar, men jeg håber, at du vil lære noget af det.

    OriginalForfatteren Matuzalem

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *