libfoo의 버전 이름은 있지만 libfoo.so가 없는 경우 -lfoo와 연결하는 방법

libfoo의 버전 이름은 있지만 libfoo.so가 없는 경우 -lfoo와 연결하는 방법

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 -lfoolibfoo.so

그 안에 있는 파일을 편집할 수 있는 권한이 없다고 가정할 때 /usr런타임에 libfoo를 성공적으로 연결하려면 어떤 해결 방법을 사용할 수 있습니까 sillyprog?

답변1

한 가지 옵션은 제어하는 ​​디렉터리에 올바른 이름을 가진 라이브러리에 대한 링크를 만드는 것입니다. 그런 다음 LIBRARY_PATHLD_LIBRARY_PATH환경 변수를 사용하여 이 디렉터리를 가리킬 수 있습니다 . 이러한 변수는 프로그램을 컴파일하거나 실행할 때 링커와 로더가 각각 라이브러리를 찾는 위치에 영향을 줍니다. ~에 따르면GCC 문서:

값은 LIBRARY_PATH와 마찬가지로 콜론으로 구분된 디렉토리 목록입니다 PATH. 기본 컴파일러로 구성된 경우 GCC는 특수 링커 파일을 검색할 때 GCC_EXEC_PREFIXGCC와 링크할 때 이러한 디렉토리를 검색할 때 지정된 디렉토리를 시도합니다. 일반 라이브러리 옵션을 사용할 때도 사용됩니다 -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

관련 정보