2008-11-04 2 views
2

저는 Fedora Linux 상자에서 작업합니다.유닉스 질문 : 로컬에 설치된 라이브러리의 경로를 자동으로 인식합니다.

나는 내 홈 디렉토리 아래에 로컬로 설치 한 바이너리 및 라이브러리의 전체 호스트를 보유하고 있습니다.

내 시스템을 설정하고 싶습니다. 루트 사용자가 접두어없이 설치 한 것과 같은 방식으로 소프트웨어를 설치합니다.

~/local/bin에 설치된 바이너리를 PATH 변수에 추가하여 실행할 수 있지만 ~/local/lib 및 ~/local/lib64의 라이브러리에 연결하는 것은 어떨까요?

LD_LIBRARY_PATH 변수와 비슷하지만 런타임이 아닌 컴파일시 라이브러리를 찾을 수 있습니까? 명시 적으로 L ~/local/lib 또는 ./configure 스크립트의 플래그를 통해 컴파일러로 경로를 전달하는 것에 대해 걱정하고 싶지 않습니다.

답변

1

LIBRARY_PATH 환경 변수를 $HOME/local/lib:$HOME/local/lib64으로 설정하십시오. 또한 C_INCLUDE_PATHCPLUS_INCLUDE_PATH과 같은 환경 변수를 설정하여 $HOME/local/include에 포함 파일을 찾을 수 있습니다. GCC가 라이브러리와 파일을 찾기 위해 사용하는 환경 변수이므로 다른 컴파일러에서는 작동하지 않을 것입니다.

+0

LD_LIBRARY_PATH를 원하셨습니까? –

+0

번호 LD_LIBRARY_PATH는 라이브러리를로드하기위한 것입니다. LIBRARY_PATH는 GCC에서이를 찾기 위해 사용됩니다. – mipadi

+0

오, 고마워,이게 최선의 대답이다. $ LIBRARY_PATH는 libs를 찾기 위해 필자가 필요로하는 것이다. 감사! – Gabe

0

LD_LIBRARY_PATH를 설정하는 것뿐만 아니라 /etc/ld.so.conf (모든 사용자, 심지어 루트에서도 작동)를 볼 수 있습니다. 또한 /etc/ld.so.conf를 사용할 경우 시스템의 보안을 고려하십시오. 사람들이 당신의 디렉토리에서 도서관을 운영한다면, 당신은 그들과 어지럽히 지 않도록 당신을 신뢰하고 있습니다.

1

가 런타임에 작동하도록 라이브러리를 얻을 수있는 두 가지 방법이있다 : 라이브러리가 사용하기 위해 단지 경우

  1. 을하고, 다중 사용자 시스템이 아니다, 다음 $LD_LIBRARY_PATH 환경 변수

  2. 를 사용
  3. 시스템에 유일한 사용자 인 경우 /etc/ld.so.conf에 디렉토리를 추가하거나 /etc/ld.so.conf.d에 새 텍스트 파일을 추가 할 수 있습니다. 컴파일 시간 일에서 시스템의 공유 라이브러리 캐시

에게 다시 나중에 ldconfig을 실행하는 것은 매우 명확하지 않다. GNU 링커는 라이브러리 경로를 지정하기 위해 -rpath 매개 변수와 $LD_RUN_PATH 환경 변수를 지원합니다. 그러나 각각의 경우 결과 경로는 바이너리로 하드 코딩되어 종료되므로 나중에 파일을 이동하려면 다시 컴파일해야합니다.

스타일 스크립트를 사용하여 작성된 프로그램은 $LD_RUN_PATH에 있지만 테스트 할 수없는 라이브러리를 찾을 수 있어야한다고 생각합니다.

두 경우 모두 ./configure --prefix=${HOME}/local을 실행하면 configure이 포함 디렉토리와 라이브러리를 모두 확인할 수 있어야합니다.

관련 문제