본문 바로가기

프로그래밍/기본기

ldconfig 명령어는 왜 쓰는 걸까

-C cache : /etc/ld.so.cache 파일 대신 지정한 파일을 이용한다.
-f conf : /etc/ld.so.conf 파일 대신 이용할 설정 파일을 지정한다.
-l : 수동으로 각각의 라이브러리를 링크한다.
-n : 명령 행에서 지정한 디렉터리만을 대상으로 하며, /usr/lib, /lib, /etc/ld.so.conf 파일은 진행하지 않는다.
-N : 캐시를 업데이트하지 않고, 단지 링크만을 업데이트한다.
-p --print-cache : 현재 캐시에 저장된 디렉터리와 라이브러리 목록을 출력한다.
-r root : 루트 디렉터리(root)를 지정한다.
-v, --verbose : 현재 버전 정보와 관련된 디렉터리와 링크들을 상세하게 출력한다.
-V, --version : 버전 정보를 출력한다.
-X : 링크를 업데이트하지 않고, 단지 캐시만을 업데이트한다.
-?. --help --usage : 사용법을 출력한다.


ldconfig는 공유 라이브러리 캐시를 다시 설정한다.


공통적인 라이브러리를 사용하는 것을 동적 링크 프로그램

컴파일 할 때 자체적인 라이브러리를 사용하는 것을 정적 링크 프로그램이라고 한다.


동적으로 링크된 실행 파일은 공유 라이브러리에 완벽하게 의존적이므로 새로운 버전의 라이브러리를 설치하고 이것을 사용하려면 디렉토리를 설정하고 ldconfig로 공유라이브러리 캐시를 다시 설정해야 한다.


이 명령어는 존재하는 파일을 조사하고, /etc/ld.so.cache 캐시 파일을 설정하면서 필요한 라이브러리를 적재하고 심볼릭 링크를 만드는 역할을 한다.


/etc/ld.so.conf.d/ 에 .conf 파일을 추가, 수정하거나

LD_LIBRARY_PATH 를 변경하게 된다면 ldconfig를 통해 라이브러리를 다시 설정해야 한다.


나는 opencv를 설치하고 Yolo를 컴파일 하는 과정에서 highgui.so 를 찾지 못하는 에러가 발생했고

/etc/ld.so.conf.d/에 opencv.conf 파일을 생성하여 /usr/loca/lib/ 만 적어준 후 ldconfig를 실행하여 해결했다.