Software Engineering/Linux

Shared library 못찾을때 해결 방법

HelloJaewon 2011. 10. 12. 14:43
[jwchoi@tc5 trousers-0.2.9.1]$ tpm_version
tpm_version: error while loading shared libraries: libtspi.so.1: cannot open shared object file: No such file or directory

위의 예처럼 어떤 ELF format 을 실행할때 shared library를 못찾는 경우가 생긴다.

$ which tpm_version // tpm_version 이 있는 경로를 알려줌

which 를 통해 얻은 경로를 바탕으로 다음을 실행

$ ldd /usr/local/sbin/tpm_version  // 해당 파일이 사용하는 shared library들을 나열
 
[jwchoi@tc5 trousers-0.2.9.1]$ which tpm_version
/usr/local/sbin/tpm_version
[jwchoi@tc5 trousers-0.2.9.1]$ ldd /usr/local/sbin/tpm_version
        linux-vdso.so.1 =>  (0x00007ffff8d80000)
        libtspi.so.1 => /usr/local/lib/libtspi.so.1 (0x00007fadf11ca000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003551800000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x000000355a800000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003552000000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003551400000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003551c00000)
        libz.so.1 => /lib64/libz.so.1 (0x0000003552800000)
[jwchoi@tc5 trousers-0.2.9.1]$

위의 결과는 제대로 찾았을때의 경우인데 만약 못찾았더라면

  libtspi.so.1 => Not Found (정확히 기억이 안남)

저런식으로 나온다.걸

이걸 해결해보자!.

이 경우엔 실제 libtspi.so 파일은 /usr/local/lib 디렉토리 하위에 있었는데
이걸 못찾고 있었다.

/etc/ld.so.conf.d 디렉토리에 보면 여러가지 conf 파일이 있는데
여기에다가 새로운 conf 파일을 추가하면 된다
이번 예에서는 vi tspi.conf 파일을 새로 생성
--------------------
tspi.conf
--------------------
/usr/local/lib
-------------------- 

위의 내용대로 경로를 지정해주고
ldconfig 명령을 통해 갱신을 시켜주면 제대로 동작한다.

 - reference
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html