Não é mais possível vincular ao opengl

Não é mais possível vincular ao opengl

Depois de atualizar para 11.10, não consigo vincular o código ao libgl/glut. freeglut3-dev etc. estão instalados e parece que também podem ser encontrados. Eu realmente não tenho certeza do que está acontecendo.

Makefile

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

Saída

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

Ao vincular com --verbose

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

E então, ao verificar os símbolos nesse arquivo

$ 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

Estou muito confuso agora.

Responder1

Funciona quando coloco -lGLU -lGL -lglut no final da chamada do gcc. Ainda tenho certeza de que isso funcionou no passado.

Responder2

Seu Makefilenão funciona mais por causa de umtransição do conjunto de ferramentas(a transição foi planejada para o natty mas a mudança que causa o seu problema foi feita no onírico). O sinalizador do vinculador --as-neededé ativado por padrão no Ubuntu 11.10. Isso causa o problema que você observou. A solução é exatamente o que você descreveu em sua resposta.

A --as-neededopção torna o vinculador sensível à ordem das bibliotecas na linha de comando. Pode ser necessário mover algumas bibliotecas posteriormente na linha de comando, para que elas venham depois de outras bibliotecas ou arquivos que exijam símbolos delas.

informação relacionada