-rpath와 -L의 차이점은 무엇입니까?


90

gccld라이브러리-사이에 그들에게 대한 검색 경로를 지정하는 방법에는 여러 가지 제공 -rpath하고 -L플래그를. 맨 페이지는이 두 플래그 사이에 차이가 없음을 나타내며 각 플래그가 라이브러리 검색 경로에 라이브러리를 추가한다고 효과적으로 말합니다. 그러나 모두 플래그를 수행하는 것이 이상한 것 같다 정확히 같은 일을. 이 두 옵션의 차이점은 무엇입니까?


2
어쩌면 당신은 생각하고 -rpath-link있습니까?
ams

답변:


106

맨 페이지의 오래된 사본을 읽고 있어야합니다 (강조 추가됨).

-rpath = dir 런타임 라이브러리 검색 경로에
      디렉토리를 추가합니다 .       ELF 실행 파일을 공유 객체와 연결할 때 사용 됩니다. 모든 -rpath       인수는 연결되어 런타임 링커에 전달되어 런타임에       공유 객체를 찾는 데 사용 됩니다.


-L searchdir
--library-path = searchdir ld 가       아카이브 라이브러리 및 ld 제어 스크립트를 검색 할
      경로 목록에 searchdir 경로를 추가합니다 .

따라서 링크 할 때 링크 할 라이브러리를 찾을 위치를 -L알려줍니다 ld. 예를 들어 빌드 트리의 라이브러리에 대해 빌드 할 때 이것을 사용합니다. 이는 .NET에 의해 일반 시스템 라이브러리 경로에 배치됩니다 make install. --rpath반면에는 실행 파일 내에 해당 경로를 저장하므로 런타임 동적 링커가 라이브러리를 찾을 수 있습니다. 라이브러리가 시스템 라이브러리 검색 경로 밖에있을 때 이것을 사용합니다.


17
주 : 1. 필요로하는 대부분의 경우 -rpath=/some/weird/path, 하나도 필요합니다 -L /some/weird/path. 2. gcc하나는 사용이 필요합니다 -Wl,-rpath=dir.
n. '대명사'm.

4
두 가지가 모두 필요한 이유를 여전히 이해하지 못합니다. 위의 nm와 동일한 경험이 있습니다. 빌드시 라이브러리에서 필요한 정보는 무엇입니까? 가능한 h- 파일을 제외하고는 원인이 있습니다. 하지만 그게 제가 생각하는 또 다른 것입니다 ...
Fredrik Johansson

1
@FredrikJohansson 그것은 새로운 질문에 대한 합리적인 주제가 될 것입니다 (물론 아직 질문하지 않았다고 가정). 최소한 사용 가능한 기호가 필요하지만 다른 것들이있을 수 있습니다.
derobert

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.