2010-01-27 4 views
1

리눅스의 tclsh8.4에 바이너리 파일이 있습니다. 특정 tcl * .so 파일에 따라 다릅니다.바이너리에 종속 모듈 (공유 객체) 가져 오기

  1. 바이너리 파일 자체에서이 정보를 얻을 수있는 방법이 있습니까?

  2. 바이너리 tclsh8.4가 의존하는 tcl * .so 파일은 제한된 권한을 가진 다른 디렉토리에 있습니다. 다른 위치에서 동일한 .so 파일을 사용하려면 이진 파일을 어떻게 처리해야합니까?

같은 위치의 .so 파일을 복사하는 것이 효과가 있습니까?

답변

4

이 경우 ldd을 사용하십시오.

Linux 로더는 /etc/ld.so.conf에 지정된 디렉토리의 공유 객체 만 찾습니다. 공유 객체를 복사하면 작동하지 않습니다. 로더에게 추가 공유 오브젝트를 찾을 위치를 알려면 $LD_LIBRARY_PATH을 사용해야합니다.

+0

감사합니다. ldd가 문제를 해결했습니다. LD_LIBRARY_PATH를 추가하여이 ssue가 수정되는지 확인합니다. 고마워요! – cppb

2

동적 .so 파일의 종속성을 보려면 ldd 명령을 사용할 수 있습니다. 실행 파일에 대한 정보를 얻으려면 readelf 명령을 확인하십시오.

여러 .so를 파일의 종속성을 확인해야하는 경우에는 다음 스크립트를 사용할 수 있습니다 : 나는 그것이 도움이되기를 바랍니다

#!/bin/bash 
# dependencies.sh 

# Needs to specify the path to check for .so dependencies 
if [ $# -ne 1 ] 
then 
    echo 'You need to specify the path' 
    exit 0 
fi 

path=$1 

for file in "$(find $path -name '*.so')" 
do 
    ldd $file 
done 

exit 0 

합니다.

+0

감사합니다. 유용합니다. – cppb