c++ - how - opengl compiler
Error con la compilaciĆ³n GLUT en ubuntu (6)
El enlazador GCC puede escanear bibliotecas en el orden en que se encuentran en la línea de comandos, lo que significa que puede escanear primero las bibliotecas y no ve a nadie usándolas y, por lo tanto, usted obtiene los errores. Para estar seguro, coloca las bibliotecas últimas en la línea de comando:
gcc hw_opengl.cpp -o hw_opengl -lGL -lGLU -lglut
Esta pregunta ya tiene una respuesta aquí:
Intento compilar una aplicación de exceso de "hello world":
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
GLint Width = 512, Height = 512;
const int CubeSize = 200;
void Display(void)
{
int left, right, top, bottom;
left = (Width - CubeSize) / 2;
right = left + CubeSize;
bottom = (Height - CubeSize) / 2;
top = bottom + CubeSize;
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3ub(255,0,0);
glBegin(GL_QUADS);
glVertex2f(left,bottom);
glVertex2f(left,top);
glVertex2f(right,top);
glVertex2f(right,bottom);
glEnd();
glFinish();
}
void Reshape(GLint w, GLint h)
{
Width = w;
Height = h;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w, 0, h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void Keyboard(unsigned char key, int x, int y)
{
#define ESCAPE ''/033''
if( key == ESCAPE )
exit(0);
}
main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(Width, Height);
glutCreateWindow("Red square example");
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Keyboard);
glutMainLoop();
}
El comando de compilación es:
gcc -lGL -lGLU hw_opengl.cpp -o hw_opengl
Tengo los siguientes errores:
/tmp/ccbnBFHC.o: In function `Display()'':
hw_opengl.cpp:(.text+0x6c): undefined reference to `glClearColor''
hw_opengl.cpp:(.text+0x78): undefined reference to `glClear''
hw_opengl.cpp:(.text+0x94): undefined reference to `glColor3ub''
hw_opengl.cpp:(.text+0xa0): undefined reference to `glBegin''
hw_opengl.cpp:(.text+0xb4): undefined reference to `glVertex2f''
hw_opengl.cpp:(.text+0xc8): undefined reference to `glVertex2f''
hw_opengl.cpp:(.text+0xdc): undefined reference to `glVertex2f''
hw_opengl.cpp:(.text+0xf0): undefined reference to `glVertex2f''
hw_opengl.cpp:(.text+0xf5): undefined reference to `glEnd''
hw_opengl.cpp:(.text+0xfa): undefined reference to `glFinish''
/tmp/ccbnBFHC.o: In function `Reshape(int, int)'':
hw_opengl.cpp:(.text+0x134): undefined reference to `glViewport''
hw_opengl.cpp:(.text+0x140): undefined reference to `glMatrixMode''
hw_opengl.cpp:(.text+0x145): undefined reference to `glLoadIdentity''
hw_opengl.cpp:(.text+0x173): undefined reference to `glOrtho''
hw_opengl.cpp:(.text+0x17f): undefined reference to `glMatrixMode''
hw_opengl.cpp:(.text+0x184): undefined reference to `glLoadIdentity''
/tmp/ccbnBFHC.o: In function `main'':
hw_opengl.cpp:(.text+0x1c1): undefined reference to `glutInit''
hw_opengl.cpp:(.text+0x1cd): undefined reference to `glutInitDisplayMode''
hw_opengl.cpp:(.text+0x1e4): undefined reference to `glutInitWindowSize''
hw_opengl.cpp:(.text+0x1f0): undefined reference to `glutCreateWindow''
hw_opengl.cpp:(.text+0x1fc): undefined reference to `glutDisplayFunc''
hw_opengl.cpp:(.text+0x208): undefined reference to `glutReshapeFunc''
hw_opengl.cpp:(.text+0x214): undefined reference to `glutKeyboardFunc''
hw_opengl.cpp:(.text+0x219): undefined reference to `glutMainLoop''
collect2: ld returned 1 exit status
He instalado GLUT: sudo apt-get install freeglut3 freeglut3-dev
Hay en / usr / lib: libglut.a
libglut.so
libglut.so.3
libglut.so.3.9.0
locate glu.h
/home/goran/QtSDK/QtSources/4.8.0/src/3rdparty/webkit/Source/ThirdParty/glu/internal_glu.h
/usr/include/GL/glu.h
/usr/include/GL/gl.h
locate gl.h
...
/usr/include/GL/gl.h
¿Qué hago incorrectamente?
Esto se debe a que xlibmesa-gl-dev y xlibmesa-glu-dev no hacen un enlace suave al archivo libGL.so y libGLU.so, por lo que ld no puede encontrarlos para enlazar con su código.
Te estás perdiendo -lglut
.
El comando de compilación correcto es gcc -lGL -lglut -lGLU hw_opengl.cpp -o hw_opengl
Compruebe si instaló binutils-gold
(Gold linker) o no, instálelo y, si ya lo hizo, extráigalo e intente en la terminal.
g++ sourcefile.cpp -lglut
g++ -lglut -lGLU -lGL helloWorld.cpp -o helloWorld
g++
, no gcc
, para cpp
g++ filename.cpp -lGL -lglut -o exfilename
y entonces
./exfilename