2013-07-20 9 views
9

Ich installierte OpenGL-Pakete in Ubuntu 13.04 (*mesa-common-dev freeglut3-dev*) und versuchte, ein Beispielprogramm auszuführen.Linkerfehler: undefinierter Verweis auf Symbol 'GlOrtho'

#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; 
} 

Allerdings bin ich auf diesen Fehler gestoßen und weiß nicht, was ich davon halten soll.

[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 

hatte ich einen Blick auf
OpenGL hello.c fails to build using CMake
als der Fehler ähnlich ist, aber ich bin mit CMake nicht

ist mein Code falsch oder muss ich schließen/ändern/einige Einstellungen optimieren?

bezeichnet habe ich diese Seite für die Installation und den Code ein:

Setting up an OpenGL development environment in Ubuntu Linux

Antwort

21

Sie müssen die OpenGL-Bibliothek verknüpfen:

g++ p1.cpp -lglut -lGL 
+0

Ich bin neu in opengl Programmierung, gibt es eine Methode, um den Prozess zu automatisieren, oder ich muss immer die Linker-Parameter wie oben für alle meine opengl-Programme angegeben hinzufügen? Ich habe den gleichen Link wie auf code projects für die Initialisierung meines Systems für opengl verwiesen und verwende Ubuntu 13.04. – meteors

+1

In Linux musste ich zusätzlich "-GLLU" hinzufügen. – user1754322

5

Sie haben die OpenGL lib nicht verknüpft, wo glOrtho() definiert ist. Damit es funktioniert, kompiliere/verlinke mit g++ p1.cpp -lglut -lGL. Beachten Sie die Reihenfolge der Verknüpfung von Bibliotheken, wie es in ld wichtig ist (Linker von g ++ verwendet). Die GLUT-Bibliothek hängt von OpenGL ab, und so muss -lGL nach -glut gehen. Dies liegt daran, dass ld nur einen Zyklus durch die Bibliotheken durchführt und daher bei der Verknüpfung von -lGL -lglut keine Referenzen von lglut auf lGL definiert werden, wodurch ein Verknüpfungsfehler entsteht. Entschuldigen Sie die lange Antwort, aber ich hoffe, Sie werden etwas daraus lernen.