libfoo가 포함되어 있다고 가정합니다 /usr/lib/x86_64-linux-gnu/
.
libfoo.so.2
->libfoo.so.2.0.0
(심볼릭 링크)libfoo.so.2.0.0
특히 빠진 것은 libfoo.so
.
/usr/local/bin/sillyprog
이와 같은 것을 사용하는 프로그램이 있다고 가정해 보겠습니다 gcc somefile.c -lfoo
. 그것을 사용하려고 할 때마다 그것이 없기 때문에 sillyprog
실패합니다 ./usr/bin/ld: cannot find -lfoo
libfoo.so
그 안에 있는 파일을 편집할 수 있는 권한이 없다고 가정할 때 /usr
런타임에 libfoo를 성공적으로 연결하려면 어떤 해결 방법을 사용할 수 있습니까 sillyprog
?
답변1
한 가지 옵션은 제어하는 디렉터리에 올바른 이름을 가진 라이브러리에 대한 링크를 만드는 것입니다. 그런 다음 LIBRARY_PATH
및 LD_LIBRARY_PATH
환경 변수를 사용하여 이 디렉터리를 가리킬 수 있습니다 . 이러한 변수는 프로그램을 컴파일하거나 실행할 때 링커와 로더가 각각 라이브러리를 찾는 위치에 영향을 줍니다. ~에 따르면GCC 문서:
값은
LIBRARY_PATH
와 마찬가지로 콜론으로 구분된 디렉토리 목록입니다PATH
. 기본 컴파일러로 구성된 경우 GCC는 특수 링커 파일을 검색할 때GCC_EXEC_PREFIX
GCC와 링크할 때 이러한 디렉토리를 검색할 때 지정된 디렉토리를 시도합니다. 일반 라이브러리 옵션을 사용할 때도 사용됩니다-l
(그러나 지정된 디렉토리를-L
먼저 사용함).
따라서 다음과 같습니다.
mkdir -p ~/.local/lib
ln -s /usr/lib/x86_64-linux-gnu/libfoo.so.2 ~/.local/lib/libfoo.so
그런 다음 컴파일에 사용된 프로그램을 실행합니다 libfoo.so
.
LIBRARY_PATH=~/.local/lib sillyprog
또는 자체적으로 연결된 프로그램을 실행하십시오 libfoo.so
.
LD_LIBRARY_PATH=~/.local/lib sillyprog