실행 파일이 공유 라이브러리를 검색하는 위치를 확인하는 방법은 무엇입니까?

실행 파일이 공유 라이브러리를 검색하는 위치를 확인하는 방법은 무엇입니까?

라이브러리가 있다는 것을 알고 있지만 실행 파일이 라이브러리를 찾을 수 없습니다. 검색 위치를 알면 라이브러리를 찾을 것으로 예상되는 심볼릭 링크를 만들 수 있습니다.

$ ~/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.

관련 정보