경로에 있는 일부 라이브러리에 의존하는 프로그램을 시작하려고 하는데 프로그램에서 파일을 찾을 수 없다고 말합니다.
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, PERL5LIB
Perl 라이브러리 등 모두 동일한 구문(콜론으로 구분된 디렉터리 목록)을 사용하는 다양한 경로 변수가 있습니다.
네이티브 라이브러리의 경우 환경 변수에 언급되어 있는지 여부에 관계없이 검색 경로에 시스템 기본 라이브러리가 있습니다 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_PATH
DYLD_LIBRARY_PATH