2011-02-24 3 views
0

배경 : 직장에서리눅스 솔라리스 대 - 컴파일 소프트웨어

나는 우리는 그들이 무엇을하고 필요한 경우 도울 수 무엇인지 시스템 관리자가 Solaris 10에서 작업을하는 데 사용 해요.

문제없이 소스에서 apache, perl 및 mod_perl을 컴파일했습니다.

난 레드햇 서버를 가지고 놀았고 문제가 발생했습니다. 시스템 관리자는 현재 아프다.

소프트웨어를 만들 때 LD_LIBRARY_PATH 관련 문제가 계속 발생합니다. 현재 테스트 목적으로 나는 홈 디렉토리에 컴파일하고 있는데, 루트 나 다른 곳에 설치할 수있는 권한이 없습니다.

우리가 Solaris에서와 같이/opt에 설치할 영역 아래에 계획을 세우지 만, 우리를 위해 sysadmin을 만들어야합니다.

내 .bashrc에는 LD_LIBRARY_PATH에 아무런 영향이 없었으므로 소스에 ffmpeg 등의 내용을 추가하기 위해 필자가 추가 한 사항이 있습니다. 나는 이것에 대해 읽고 있었고 분명히 이것은 갈 길이 아니라 신뢰할 수 없거나 뭔가가있는 것 같습니다. ldconfig에 대한 액세스 권한이 없습니다 (권한이 거부 됨). 이제

가 quetions :

가 중단되지 않도록 리눅스에서 애플리케이션을 구축하는 가장 좋은 방법은 무엇입니까? /etc/ld.so.conf.d/ 아래에 항목을 만드시겠습니까?

LD_LIBRARY_PATH가 실제로하는 일에 대해 간략하게 설명 할 수 있습니까? ld.so(8) 사람 페이지에서

답변

0

:

LD_LIBRARY_PATH 
      A colon-separated list of directories in which to search for ELF 
      libraries at execution-time. Similar to the PATH environment 
      variable. 

그러나 정직하게, 관리자를 찾을 수 있습니다. 필요한 경우 하나가 되십시오. 오, 그리고 패키지를 만드십시오.

+0

소스에서 접두사 디렉토리로 컴파일하고 패키지를 만드는 것의 차이점은 무엇입니까? 감사합니다 – Raoul

+0

패키지에는 여러 상황에서 사용할 수있는 파일에 대한 메타 데이터가 포함되어 있습니다 (예 : 수퍼 유저 명령이 잘못됨). 또한 컴파일 된 패키지를 공통 위치에 배치하고 각각을 다시 컴파일 할 필요없이 필요한만큼 많은 시스템에 설치할 수 있습니다. –

+0

그는 현명한 방법으로 보인다. 다음 기사는 전에 한번도 해 본 적이없는 사람을위한 훌륭한 입문서라고 할 수 있겠습니까? http://www.ibm.com/developerworks/library/l-rpm1/ – Raoul

0

LD_LIBRARY_PATH 개별 사용자 또는 개별 프로세스가 세분화 된 기준으로 검색 경로에 위치를 추가 할 수 있습니다. /etc/ld.so.conf는 시스템 전체 라이브러리 경로 설정, 즉 응용 프로그램 배포에 사용되어야합니다. (더 나은 것은 rpm/deb로 패키징하여 배포판의 일반적인 패키지 채널을 통해 배포 할 수 있습니다.)

일반적으로 사용자는 LD_LIBRARY_PATH을 사용하여 프로그램 실행을 강제로 다른 버전의 라이브러리를 선택할 수 있습니다. 일반적으로 이것은 디버깅이나 인스트루먼트 된 버전의 라이브러리를 선호 할 때 유용하지만, 자신의 코드를 타사 코드에 삽입하는데도 사용할 수 있습니다. (다른 사람의 bash 프로파일을 변경하여 코드를 실행하지 않고도 속일 수 있다면 악의적 인 목적으로 이것을 사용할 수도 있습니다).

일부 응용 프로그램은 기본이 아닌 위치에 "개인"라이브러리를 설치하면 LD_LIBRARY_PATH를 설정합니다. 즉, 일반 동적 연결에는 사용되지 않지만 여전히 존재합니다. 이런 시나리오의 경우, dlopen()과 친구들을 선호하는 경향이 있습니다.

+0

다른 점은 무엇입니까? 소스에서 접두사 디렉토리로 컴파일하고 패키지를 만드는 것 사이에? 감사합니다. – Raoul

+0

패키지를 만드는 것은 일반적으로 라이브러리의 의존성 추적을위한 조항을 가지고 있습니다 (패키지에 의해 제공되고 패키지에 따라 다름). 또한 두 가지가 동일한 파일을 제공하려고 시도 할 때 충돌 해결 기능을 제공하며 FHS 감각적 인 동작의 기본 경로에 직접 설치하므로 비정상적인 경로를 설정하지 않아도됩니다. – Flexo

0

설정 LD_LIBRARY_PATH 때문에 (다른 이유의 사이에) 해로운 간주됩니다

  1. 귀하의 프로그램은 동적으로 LD_LIBRARY_PATH를 기반으로 연결되어 있습니다.즉, 도서관의 특정 버전 (예 : LD_LIBRARY_PATH)에 연결될 수 있습니다. /home/user/lib/libtheora.so. 다른 사람이 귀하의 LD_LIBRARY_PATH없이이 프로그램을 실행하려고 시도하면 기본 버전과의 연결이 끊어 지므로 많은 혼란을 야기 할 수 있습니다. /usr/lib/libtheora.so.
  2. 기본 시스템 링크 경로보다 우선 사용됩니다. 즉, 당신이 libc을 도데체로 가지고 가면 LD_LIBRARY_PATH이 귀하의 계정을 손상시키는 것과 같은 나쁜 일을 할 수도 있습니다.

ignacio가 말한 것처럼 가능한 모든 곳에서 패키지를 사용하십시오. 이렇게하면 라이브러리의 악몽을 피할 수 있습니다.

관련 문제