런타임에 공유 라이브러리에 링크하는 프로세스를 실행할 때 (프로세스가 시작될 때 링크되고 나중에 링크되지 않음 ) 다른 dlload()
공유 라이브러리 ( .so
) 파일 을 어디에서 찾 LD_LIBRARY_PATH
습니까?
배경:
특정 타사 라이브러리를 사용하는 필자가 작성한 C ++ 코드가 있습니다. 라이브러리를 설치하고 코드를 우분투이지만 다른 버전과 gcc의 다른 두 가지 플랫폼으로 컴파일했습니다. 라이브러리는 소스에서 컴파일 및 설치 /usr/local/lib
되었으며 두 플랫폼 모두에 있습니다. 코드를 컴파일 할 때 pkg-config --libs
타사 라이브러리 의 매개 변수 와 연결하고 pkg-config --libs
두 플랫폼에서 똑같은 것을 반환 한다는 것을 확인했습니다 .
내 코드는 두 플랫폼 모두에서 성공적으로 컴파일되며 두 플랫폼 모두에서 LD_LIBRARY_PATH
정의되거나 비어있는 것으로 정의되지 않습니다 ""
. 그러나 한 플랫폼에서 실행하면 정상적으로 작동하고 다른 플랫폼에서는이 오류가 발생합니다.
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
재미있게도 작동 하지 않는 것은 우분투와 gcc 의 최신 버전입니다. : /
그래서 작업중 인 라이브러리가 라이브러리를 찾는 방법을 알아 내려고하여 깨진 라이브러리가 같은 방식으로 라이브러리를 찾도록 할 수 있습니다. (즉, 설정하지 않고 LD_LIBRARY_PATH
)
최신 정보:
다음은 내 출력입니다. cat /etc/ld.so.conf.d/*
... 작동하는 (이전) 시스템에서 :
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... 깨진 (새로운) 시스템에서 :
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
하지만 여전히 오류가 발생합니다 error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... 디렉토리를 선택 하지 않은 이유 가 /etc/ld.so.conf.d/*.conf
있습니까?
sudo ldconfig -v
아래 제안대로 실행하십시오 . 여전히 작동하지 않으면의 출력으로 질문을 업데이트하십시오 ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
하지만 확실하지 않습니다.