![공유 라이브러리를 "설치"하는 방법](https://linux55.com/image/205922/%EA%B3%B5%EC%9C%A0%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%22%EC%84%A4%EC%B9%98%22%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
저는 gcc를 사용하여 외부 라이브러리를 사용하여 C++ 애플리케이션을 개발 중입니다. 예를 들어 libtiff
및 libpng
. 나는 이것을 얻었고 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.conf
로ldconfig
제공된 경로를 검색하고ld.so
시스템 전체 라이브러리 캐시를 업데이트합니다.
답변2
먼저, 라이브러리 위치에 복사하는 대신 외부 라이브러리를 설치해야 합니다. 설치 스크립트는 이를 /usr/lib
또는 /usr/local/lib
*에 넣습니다. 이렇게 하면 작업이 더 쉬워집니다.
도서관 위치에 관해서는 /usr/local/lib
*를 추천합니다.
이제 아직 이 작업을 수행하지 않았다면 /usr/local/lib
it()을 넣을 수 있으며, 그렇다면 실행해야 합니다. 이 작업이 이미 수행된 경우에는 필요하지 않습니다./etc/ld.so.conf
/sbin/ldconfig
마지막으로, 내가 귀하의 라이브러리를 찾았는지 확인할 수 있습니다
ldconfig -p | grep your_library.so
.
* 또는 /usr/lib64
또는 /usr/local/lib64
x86_64의 경우