경로에서 lib를 찾을 수 없습니다

경로에서 lib를 찾을 수 없습니다

경로에 있는 일부 라이브러리에 의존하는 프로그램을 시작하려고 하는데 프로그램에서 파일을 찾을 수 없다고 말합니다.

11:45:27 ~ > echo $PATH
/usr/share/fsl/5.0/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/mri/Scripts:/home/mri/Scripts/MRI:/home/mri/Software/BRAINS3/bin:/home/mri/Software/BRAINS3/lib:/home/mri/Software/ITK_Build/bin:/home/mri/Software/ITK_Build/lib:/home/mri/Software/VTK_Build/bin:/home/mri/Software/VTK_Build/lib:/usr/lib/fsl/5.0

11:45:33 ~ > brains3
/home/mri/Software/BRAINS3/bin/brains3_real: error while loading shared libraries: libiplUtils.so: cannot open shared object file: No such file or directory

11:45:35 ~ > sudo find / -name libiplUtils.so
[sudo] password for mri: 
/home/mri/Software/BRAINS3/lib/libiplUtils.so

이 문제를 해결하는 방법을 아는 사람이 있나요?

답변1

환경 변수를 사용하여 라이브러리 검색 경로를 지정할 수 있습니다 LD_LIBRARY_PATH.

$ export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
$ brains3

전체 시스템에 대해 이 변수를 설정하면 안 됩니다. 소프트웨어를 시스템 전체에 설치할 수 없거나 설치하고 싶지 않은 경우 래퍼 스크립트를 만들 수 있습니다.

답변2

동적 링커는 LD_LIBRARY_PATH에서 라이브러리를 검색합니다.

답변3

Unix 시스템은 다양한 유형의 파일을 다양한 디렉토리로 분류하는 경향이 있습니다. 실행 파일(예: /usr/bin), 문서(예: /usr/man, /usr/info, ...), 기본 라이브러리(예: /usr/lib), Perl 라이브러리(예: ) 등에 대한 /usr/lib/perl5별도의 디렉터리가 있습니다 . 따라서 PATH실행 파일, MANPATH매뉴얼 페이지, LD_LIBRARY_PATH기본 라이브러리1, PERL5LIBPerl 라이브러리 등 모두 동일한 구문(콜론으로 구분된 디렉터리 목록)을 사용하는 다양한 경로 변수가 있습니다.

네이티브 라이브러리의 경우 환경 변수에 언급되어 있는지 여부에 관계없이 검색 경로에 시스템 기본 라이브러리가 있습니다 LD_LIBRARY_PATH. Linux에서는 이러한 디렉터리가 나열 /etc/ld.so.conf되며 /lib항상 /usr/lib검색 경로에 있습니다.

따라서 여러 가지 가능성이 있습니다.

  • 추가됨 (Linux 특정, 다른 UNIX 변형 /home/mri/Software/BRAINS3/lib에도 /etc/ld.so.conf유사한 파일이 있을 수 있음). ldconfig변경 사항이 적용되도록 실행하세요 .
  • 추가(모든 사용자가 사용 가능) 또는 추가 export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib(본인만 사용 가능)./etc/profile~/.profile
  • 래퍼 스크립트를 만듭니다.

    #!/bin/sh
    export LD_LIBRARY_PATH=/home/mri/Software/BRAINS3/lib
    exec /home/mri/Software/BRAINS3/bin/brains3 "$@"
    
  • /home/mri/Software/BRAINS3/lib검색 경로의 다른 디렉터리에 있는 라이브러리에 대한 심볼릭 링크를 만듭니다.

    ln -s /home/mri/Software/BRAINS3/bin/brains3/lib*.so.* /usr/local/lib/
    

¹은 대부분의 Unix 변형에서 사용되는 이름이지만 Mac OS X에서는 . LD_LIBRARY_PATHDYLD_LIBRARY_PATH

관련 정보