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

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



답변

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

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


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

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


답변