어제의 삽질 - 시스템이 엉키는 경우
Posted by 미스란디르
emerge glibc를 하는데, 똑같은 짓을 계속 하고 있길래 왜그런가 했더니, /usr/include/linux 에 깔린 리눅스 헤더의 날짜가 미래라고 거부를 하는 거였다.
find /usr/include -print |xargs
로 해결했다.
freeglut을 빌드하는데 gcc가 (정확히는 링커가) libGLU.so 가 요구하는 libstdc++ 을 찾을수가 없댄다. /etc/ld.so.conf 를 제대로 지정했는데도 불구하고 여전히 뭔가 이상하다. ldconfig를 아무리 해도 안된다. 알고 봤더니 /etc/ld.so.cache 의 날짜가 미래라서 ldconfig 가 안먹는 것이었다. 바로 요런 에러다.
/i686-pc-linux-gnu/4.2.0/../../../libGLU.so, not found (try using -rpath or -rpath-link) /usr/lib/gcc/i686-pc-linux-gnu/4.2.0/../../../libGLU.so: undefined reference to
operator delete(void*)@GLIBCXX_3.4' /usr/lib/gcc/i686-pc-linux-gnu/4.2.0/../../../libGLU.so: undefined reference tovtable for cxxabiv1::vmiclasstypeinfo@CXXABI1.3'그러나 사실 위의 짐작은 틀린 것이었는데, ld.so.cache를 지우고 새로 생성해도 libstdc++를 찾을 수가 없다고 한다. ldd로 libGLU.so 를 찍어보면
ldd /usr/lib/libGLU.so
linux-gate.so.1 => (0xffffe000) libGL.so.1 => //usr//lib/opengl/nvidia/lib/libGL.so.1 (0xb7ddb000) libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/4.2.0/libstdc++.so.6 (0xb7cf5000) 이하 생략.
이렇게 제대로 나왔으니까.
ld하는 과정을 strace로 찍어봤더니,
[pid 1241] open("/usr/i486-pc-linux-gnu/lib/libGL.so.1", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
[pid 1241] open("/usr/lib/gcc/i486-pc-linux-gnu/4.1.1/libGL.so.1", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
이런게 보인다. 대체 i486은 어디 들어간걸까?
참고로 ld.so.conf에는
/usr/lib
/usr/local/lib
/usr/lib/gcc/i686-pc-linux-gnu/4.2.2/
정도가 들어있지 저런내용은 전혀 없다.
env-update ; etc-update
도 해보고, gcc, binutils, 심지어는 첫번째에서 얘기한 glibc까지 다시 emerge해봤지만 결과는 마찬가지.
결국 밝혀진 원인은 바로
/usr/etc/ld.so.conf 의 존재였다. 실수로 stage파일을 /usr 에다 풀어서 쓰레기가 있었는데, 이걸 ld가 무식하게 불러온것. 정말 신기하지 않은가?
좀 허무했지만 아무튼 밝혀졌으니 다행

ㅊㅊㅈ...