gcc
및 ld
라이브러리-사이에 그들에게 대한 검색 경로를 지정하는 방법에는 여러 가지 제공 -rpath
하고 -L
플래그를. 맨 페이지는이 두 플래그 사이에 차이가 없음을 나타내며 각 플래그가 라이브러리 검색 경로에 라이브러리를 추가한다고 효과적으로 말합니다. 그러나 모두 플래그를 수행하는 것이 이상한 것 같다 정확히 같은 일을. 이 두 옵션의 차이점은 무엇입니까?
gcc
및 ld
라이브러리-사이에 그들에게 대한 검색 경로를 지정하는 방법에는 여러 가지 제공 -rpath
하고 -L
플래그를. 맨 페이지는이 두 플래그 사이에 차이가 없음을 나타내며 각 플래그가 라이브러리 검색 경로에 라이브러리를 추가한다고 효과적으로 말합니다. 그러나 모두 플래그를 수행하는 것이 이상한 것 같다 정확히 같은 일을. 이 두 옵션의 차이점은 무엇입니까?
답변:
맨 페이지의 오래된 사본을 읽고 있어야합니다 (강조 추가됨).
-rpath = dir 런타임 라이브러리 검색 경로에
디렉토리를 추가합니다 . ELF 실행 파일을 공유 객체와 연결할 때 사용 됩니다. 모든 -rpath 인수는 연결되어 런타임 링커에 전달되어 런타임에 공유 객체를 찾는 데 사용 됩니다.
대
-L searchdir
--library-path = searchdir ld 가 아카이브 라이브러리 및 ld 제어 스크립트를 검색 할
경로 목록에 searchdir 경로를 추가합니다 .
따라서 링크 할 때 링크 할 라이브러리를 찾을 위치를 -L
알려줍니다 ld
. 예를 들어 빌드 트리의 라이브러리에 대해 빌드 할 때 이것을 사용합니다. 이는 .NET에 의해 일반 시스템 라이브러리 경로에 배치됩니다 make install
. --rpath
반면에는 실행 파일 내에 해당 경로를 저장하므로 런타임 동적 링커가 라이브러리를 찾을 수 있습니다. 라이브러리가 시스템 라이브러리 검색 경로 밖에있을 때 이것을 사용합니다.
-rpath=/some/weird/path
, 하나도 필요합니다 -L /some/weird/path
. 2. gcc
하나는 사용이 필요합니다 -Wl,-rpath=dir
.
-rpath-link
있습니까?