Linux

Linux : "cannot open shared object file: No such file or directory" 라이브러리를 찾을 수 없다. 프로그램 실행이 안 될 때 해결 방법(error while loading shared libraries)

joon83 2023. 1. 16. 18:29

program 을 실행 시 다음과 같이 "cannot open shared object file: No such file or directory" 에러가 나는 경우가 있습니다.

 

ex) openssl

$ openssl

openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

 

다음과 같은 절차를 통해 해결할 수 있다.

 

ldd 로 필요 library 확인하기

공유 라이브러리 의존성을 출력하는 ldd 로 프로그램 실행에 필요한 라이브러리 확인.

$ ldd `which openssl`
        linux-vdso.so.1 (0x00007ffcc7df1000)
        libssl.so.1.1 => not found
        libcrypto.so.1.1 => not found
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f3f51b7a000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3f5195c000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f3f515b1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f3f51d7e000)

libssl.so.1.1와 libcrypto.so.1.1 이 "not found" 인 것을 확인.

"not found" 지만 실제 원인은 2가지입니다.

이런 현상은 다음과 같은 원인때문에 발생합니다.

  1. 실행에 필요한 library 가 없음 → find 명령어로 시스템에서 library 를 찾고 있으면 아래에서 설명하는 환경 변수에 경로를 추가합니다. 
  2. 실행에 필요한 library 가 환경 변수에 없음

LD_LIBRARY_PATH 환경 변수 확인

리눅스에서 실행에 필요한 공유 라이브러리는 LD_LIBRARY_PATH 환경 변수에서 찾게 됩니다. 대부분의 공유 라이브러리를 못 찾는다는 에러의 원인은 바로 LD_LIBRARY_PATH 변수가 잘못 설정되어서입니다.

특히 third party program의 경우 /opt 나  /usr/local 같이 별도의 경로에 설치되는 경우가 많으므로 이런 에러가 발생하게 됩니다.

 

먼저 환경 변수를 확인하려면 다음 명령을 실행합니다.

$ echo $LD_LIBRARY_PATH

LD_LIBRARY_PATH 환경 변수 경로내에 라이브러리 파일(Ex: libssl.so.1.1) 이 있는지 확인하려면 다음 스크립트를 실행합니다.

IFS=':' ; for i in $LD_LIBRARY_PATH; do ls -l $i/libssl.so.1.1 2>/dev/null;done

위 코드 실행시 결과가 나오지 않는다면 LD_LIBRARY_PATH 제대로 설정되지 않은 것입니다.

 

라이브러리가 있는 경로를 확인한 후에 LD_LIBRARY_PATH에 해당 경로가 없다면 다음과 같이 설정합니다. 다음은 compile 해서 프로그램 설치시 많이 사용되는 /usr/local/lib64 를 추가하는 예제입니다. 

export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

이제 다시 ldd 를 실행해서 정상적으로 라이브러리를 찾는 지 확인해 보면 됩니다.

이제 로그인시에도 문제없도록 export LD_LIBRARY_PATH 구문을 shell 초기화 파일(.bashrc)에 추가하면 됩니다.

 

원글

https://www.lesstif.com/lpt/linux-error-while-loading-shared-libraries-95880436.html 에서 찾은내용입니다. (감사합니다)

'Linux' 카테고리의 다른 글

ps -ef | grep defunct [defunct(zombie, 좀비) process 죽이기]  (0) 2023.01.16