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-needed
Ubuntu 11.10에서 기본적으로 활성화됩니다. 이로 인해 관찰한 문제가 발생합니다. 해결책은 답변에서 설명한 것과 정확히 같습니다.
이
--as-needed
옵션을 사용하면 링커가 명령줄의 라이브러리 순서에 민감하게 됩니다. 나중에 명령줄에서 일부 라이브러리를 이동하여 기호가 필요한 다른 라이브러리나 파일 뒤에 오게 해야 할 수도 있습니다.