라이브러리가 있다는 것을 알고 있지만 실행 파일이 라이브러리를 찾을 수 없습니다. 검색 위치를 알면 라이브러리를 찾을 것으로 예상되는 심볼릭 링크를 만들 수 있습니다.
$ ~/Apps/simutrans/simutrans
/home/dan/Apps/simutrans/simutrans: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file: No such file or directory
$ locate libbz2
...
/lib/x86_64-linux-gnu/libbz2.so.1
/lib/x86_64-linux-gnu/libbz2.so.1.0
/lib/x86_64-linux-gnu/libbz2.so.1.0.4
/usr/lib/x86_64-linux-gnu/libbz2.a
/usr/lib/x86_64-linux-gnu/libbz2.so
...
분명히 실행 파일은 /etc/ld.so.conf*
라이브러리를 찾는 데 사용되지 않습니다. 그렇다면 라이브러리를 찾을 것입니다.
$ cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
readelf
다음에 설명된 대로 검사 실행 파일을 사용하십시오 .시스템은 동적 라이브러리를 어디에서 검색합니까?RUNPATH
, 라이브러리를 찾아야 할 경우 나타나는 항목을 표시하지 마십시오 .
답변1
프로그램이 현재 사용자(setuid 등 없음)로 실행 중이라고 가정하면 다음을 사용할 수 있습니다.strace
다음과 같은 정보를 얻으세요.
strace -o foo.out ~/Apps/simutrans/simutrans
그리고 출력 파일에서 호출을 찾으세요 open
.