더 이상 OpenGL에 연결할 수 없습니다.

더 이상 OpenGL에 연결할 수 없습니다.

11.10으로 업데이트한 후 libgl/글루에 코드를 연결할 수 없습니다. freeglut3-dev 등이 설치되어 있고 발견되는 것 같습니다. 무슨 일이 일어나고 있는지 잘 모르겠습니다.

메이크파일

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

산출

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

--verbose로 연결하는 경우

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

그런 다음 해당 파일의 기호를 확인할 때

$ 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

나는 지금 매우 혼란스러워요.

답변1

-lGLU -lGL -llut를 gcc 호출 끝에 넣으면 작동합니다. 나는 이것이 과거에 효과가 있었다고 아직도 확신합니다.

답변2

Makefile다음으로 인해 더 이상 작동하지 않습니다 .툴체인 전환(전환은 natty를 위해 계획되었지만 문제를 일으키는 변경은 oneiric에서 이루어졌습니다.) 링커 플래그는 --as-neededUbuntu 11.10에서 기본적으로 활성화됩니다. 이로 인해 관찰한 문제가 발생합니다. 해결책은 답변에서 설명한 것과 정확히 같습니다.

--as-needed옵션을 사용하면 링커가 명령줄의 라이브러리 순서에 민감하게 됩니다. 나중에 명령줄에서 일부 라이브러리를 이동하여 기호가 필요한 다른 라이브러리나 파일 뒤에 오게 해야 할 수도 있습니다.

관련 정보