[innuendo@host2 /lib]# ll libc*
-rwxr-xr-x 1 root root 4761074 Dec 15 2000 libc-2.2.so
-rwxr-xr-x 1 root root 8018041 Dec 19 2000 libc-2.3.so
lrwxrwxrwx 1 root root 11 Oct 1 2002 libc.so.6 -> libc-2.2.so
libc.so.6 은 현재 libc-2.2.so 파일의 링크
새로운 공유 라이브러리 libc-2.3.so 로 업데이트를 한다고 하면..
[innuendo@host2 /lib]# ln -sf libc-2.3.so libc.so.6
[innuendo@host2 /lib]# ll libc*
-rwxr-xr-x 1 root root 4761074 Dec 15 2000 libc-2.2.so
-rwxr-xr-x 1 root root 8018041 Dec 19 2000 libc-2.3.so
lrwxrwxrwx 1 root root 11 Oct 1 2002 libc.so.6 -> libc-2.3.so
주의할 점은 새로운 링크로 바꾼다고 ln -s 옵션만 주면 파일이 존재한다는 에러메세지를 뱉어낸다.
그래서 심볼릭링크를 먼저 제거한 후 새로운 공유 라이브러리로 링크를 걸어주면 되겠지 하고 실행하면 끝없는 낭패를 겪게 될 수가 있다.
libc 는 유닉스에서 사용하는 표준 C라이브러리이며 거의 모든 실행파일이 런타임에 이 라이브러리를 호출하게 된다.
당연 링크를 잃어버렸으므로 ln 명령이 먹히지 않게 된다.
그래서 강제로 링크의 값을 바꾸기위해 -f 옵션을 사용하는 것이다.
만일 이런 경우가 생기면 정적라이브러리를 가져와서 컴파일 한 다음 공유 라이브러리를 업데이트하고 정적 라이브러리를 제거해야 할 것이다. 해보지 않아서 확실히 장담할 수는 없다.

댓글을 달아 주세요