Ya no puedo vincular contra opengl

Ya no puedo vincular contra opengl

Después de actualizar a 11.10, no puedo vincular el código con libgl/glut. freeglut3-dev, etc. están instalados y parece que también se pueden encontrar. Realmente no estoy seguro de lo que está pasando.

Archivo Make

gltest: gltest.cc
    gcc -Wall -lglut -lGLU -lGL gltest.cc -o gltest

gltest.cc

#include <GL/glut.h>

int main(int argc, char **argv) {

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DEPTH |     GLUT_DOUBLE | GLUT_RGBA);
  glutInitWindowPosition(100,100);
  //glutInitWindowSizendowSize(320,320);
  glutCreateWindow("test");

  return 1;
}

Producción

jonas@fortress:~/dev/checkouts/test$ make
gcc -Wall -lglut -lGLU -lGL gltest.cc -o gltest
/tmp/cct1HevY.o: In function `main':
gltest.cc:(.text+0x1e): undefined reference to `glutInit'
gltest.cc:(.text+0x28): undefined reference to `glutInitDisplayMode'
gltest.cc:(.text+0x37): undefined reference to `glutInitWindowPosition'
gltest.cc:(.text+0x41): undefined reference to `glutCreateWindow'
collect2: ld returned 1 exit status
make: *** [gltest] Error 1

Al vincular con --verbose

attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib/libglut.so succeeded

Y luego, al verificar los símbolos en ese archivo

$ readelf -Ws /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../../lib/libglut.so|grep glutInit
   278: 000000000001dfc0  1581 FUNC    GLOBAL DEFAULT   11 glutInit

Estoy muy confundido ahora.

Respuesta1

Funciona cuando coloco -lGLU -lGL -lglut al final de la llamada a gcc. Todavía estoy bastante seguro de que esto funcionó en el pasado.

Respuesta2

Tu Makefileya no funciona debido a untransición de cadena de herramientas(la transición fue planeada para natty pero el cambio que causa tu problema se realizó en onírico). La bandera del vinculador --as-neededestá activada de forma predeterminada en Ubuntu 11.10. Esto causa el problema que observaste. La solución es exactamente la que describiste en tu respuesta.

La --as-neededopción hace que el vinculador sea sensible al orden de las bibliotecas en la línea de comandos. Es posible que necesites mover algunas bibliotecas más adelante en la línea de comandos, para que aparezcan después de otras bibliotecas o archivos que requieran símbolos de ellas.

información relacionada