공유 라이브러리를 "설치"하는 방법

공유 라이브러리를 "설치"하는 방법

저는 gcc를 사용하여 외부 라이브러리를 사용하여 C++ 애플리케이션을 개발 중입니다. 예를 들어 libtifflibpng. 나는 이것을 얻었고 apt-get모든 것이 잘 작동합니다.

그러나 독립 실행형 .a및 파일 쌍으로 .so lib제공되는 또 다른 타사 라이브러리를 추가했습니다. .so에 저장된 또 다른 것을 발견 /usr/lib/x86_64-linux-gnu하고 거기에 새 것을 복사했습니다 .so. 내 애플리케이션을 성공적으로 연결했지만 " error while loading shared libraries: libThirdParty.so: cannot open shared object file: No such file or directory" 메시지와 함께 실행이 실패했습니다.

내가 무엇을 놓치고 있나요?

답변1

애플리케이션이 라이브러리를 찾는 방법에는 두 가지가 있습니다.

  • 환경 변수 LD_LIBRARY_PATH. 이를 콜론으로 구분하여 포함 라이브러리에 대한 경로로 설정합니다. 먼저 비어 있지 않은지 확인하고( echo $LD_LIBRARY_PATH), 그렇다면 확장합니다(예: ) LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/foo/lib:/home/myself/lib. 이는 테스트용으로 적합하며, sudo 사용자가 아닌 경우 root영구적으로 사용하려는 경우 쉘 초기화에 추가할 수 있습니다(예:). .zshrc그러나 물론 변수를 구문 분석하고 파일을 검색하는 것은 속도가 느려지므로 일반적으로 두 번째 접근 방식을 선호합니다.
  • 라이브러리를 복사한 후 ldconfig루트로 사용하거나 sudo표준 라이브러리 경로( /lib/usr/lib또는 /lib64/usr/lib64)는 물론 구성 파일의 경로 와 라이브러리에 대한 인수 /etc/ld.so.confldconfig제공된 경로를 검색하고 ld.so시스템 전체 라이브러리 캐시를 업데이트합니다.

답변2

먼저, 라이브러리 위치에 복사하는 대신 외부 라이브러리를 설치해야 합니다. 설치 스크립트는 이를 /usr/lib또는 /usr/local/lib*에 넣습니다. 이렇게 하면 작업이 더 쉬워집니다.

도서관 위치에 관해서는 /usr/local/lib*를 추천합니다.

이제 아직 이 작업을 수행하지 않았다면 /usr/local/libit()을 넣을 수 있으며, 그렇다면 실행해야 합니다. 이 작업이 이미 수행된 경우에는 필요하지 않습니다./etc/ld.so.conf/sbin/ldconfig

마지막으로, 내가 귀하의 라이브러리를 찾았는지 확인할 수 있습니다 ldconfig -p | grep your_library.so.

* 또는 /usr/lib64또는 /usr/local/lib64x86_64의 경우

관련 정보