라이브러리가 프로그램에 의해 설치되고 사용 가능한지 테스트하고 싶다고 가정합니다. ldconfig -p | grep mylib
시스템에 설치되어 있는지 확인할 수 있습니다 . 그러나 라이브러리가 설정을 통해서만 알려지면 어떻게 LD_LIBRARY_PATH
될까요?
이 경우 프로그램에서 라이브러리를 찾을 수 있지만 찾지 못할 수 있습니다 ldconfig
. 라이브러리가 결합 된 링커 경로 에 있는지 어떻게 확인할 수 있습니까?
실제로 실제로 프로그램을 가지고 있지 않은 경우에도 작동하는 솔루션을 찾고 있다고 덧붙일 것입니다 (예 : 프로그램이 아직 컴파일되지 않은 경우), 특정 라이브러리가 ld
‘ 경로.
답변
ldconfig
액세스 할 수있는 모든 라이브러리를 나열 할 수 있습니다. 이 라이브러리는 캐시에도 저장됩니다.
/sbin/ldconfig -v -N
캐시를 재구성하지 않고 모든 일반적인 라이브러리 경로를 크롤링하고 사용 가능한 모든 라이브러리를 나열합니다 (루트가 아닌 사용자는 불가능합니다). LD_LIBRARY_PATH의 라이브러리를 고려하지는 않지만 (이 게시물이 편집하기 전에 말한 것과는 달리) 아래 행을 사용하여 추가 라이브러리를 명령 행에 전달할 수 있습니다.
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
답변
:
LD_LIBRARY_PATH로 전역 대체 (공백)
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
답변
gcc로 간단한 테스트 프로그램을 컴파일하고 라이브러리를 연결할 수 있습니다. 그런 다음 ldd를 사용하여 사용 된 라이브러리를 확인할 수 있습니다. 나는 이와 같은 것을 사용한다 :
echo "int main(){}" | gcc -x c++ -Wl,--no-as-needed -lmylib - && ldd a.out | grep mylib
-Wl,--no-as-needed
라이브러리의 심볼이 사용되지 않기 때문에 링커에서 라이브러리를 버리지 않습니다.