2014-09-30 9 views
3

일부 공유 라이브러리를 연결하는 프로그램을 작성하고 있습니다. 그것들은 프로젝트와 관련하여 lib/디렉토리에 있습니다.LD_LIBRARY_PATH 설정을 피하기 위해 실행 파일에 상대 라이브러리 경로를 추가하는 방법이 있습니까

내가 겪고있는 문제는 실행 파일이 관련 ../lib 디렉토리의 라이브러리를 검색하는 것을 알고 싶다는 것입니다. 이것이 가능한가?

저는 ld_library_path를 변경하거나 루트 소유의 표준 경로 중 하나로 파일을 옮기고 싶지 않습니다. 내가 실행 파일을 컴파일하고 .so를 파일은 링커에서의 strace/LDD

+4

일시적으로 라이브러리로드 경로를 변경하는 스크립트에서 프로그램을 실행할 수 없습니다. –

+0

다른 모든 경우에 오류가 발생하면 옵션이됩니다. Makefile에서이 작업을 수행하는 래퍼를 만들 수 있습니다. 결국 Boost :: Python을 사용하여이 방법으로는 작동하지 않는 Python 모듈을 만들고 싶습니다./usr/lib에 대처하는 것을 끝내기 전에 옵션을 찾는다. – joeButler

답변

6
사용할 수

-rpath 함께 표시 표준 경로 중 하나에있을 때 실행할 수 있어요

(링커로 LD를 사용하여). 그 매뉴얼 페이지에서

: 디렉토리

런타임 라이브러리 검색 경로에 디렉토리를 추가

-rpath =

. 이것은 ELF 실행 파일을 공유 객체와 연결할 때 사용됩니다. 모든 -rpath 인수는 연결되어 런타임 링커에 전달되며 런타임 링커는이를 런타임에 공유 객체를 찾는 데 사용합니다. -rpath 옵션은 링크에 명시 적으로 포함 된 공유 객체가 필요로하는 공유 객체를 찾을 때도 사용됩니다. -rpath-link 옵션에 대한 설명을 참조하십시오. ELF 실행 파일을 링크 할 때 -rpath를 사용하지 않으면 환경 변수 "LD_RUN_PATH"의 내용이 정의 된 경우 사용됩니다.

+5

일반적으로 rpath보다 더 유용하다. rpath의'$ ORIGIN' 값은 유용하다. 자세한 정보는 http://man7.org/linux/man-pages/man8/ld.so.8.html에서'$ ORIGIN'을 검색하십시오. –