이해가 안 돼요 -Wl, -rpath -Wl,


245

편의상 아래 관련 맨 페이지를 추가했습니다.

내 (오해) 먼저 이해 :로 옵션을 분리 해야하는 경우 ,두 번째 -Wl옵션 ,-rpath옵션에 대한 인수 이기 때문에 두 번째 옵션이 아니라는 것을 의미합니다 .

나는 어떻게 논쟁을 -rpath가질 수 있는지 이해하지 못한다 -Wl,.!

내 마음에 의미가있는 것은 다음과 같습니다.

-Wl,-rpath .

현재 디렉토리 인수와 함께 -rpath 링커 옵션을 호출해야합니다.


남자 gcc :

-옵션

링커에 옵션으로 옵션을 전달하십시오. 옵션에 쉼표가 포함되어 있으면 쉼표에서 여러 옵션으로 분할됩니다. 이 구문을 사용하여 옵션에 인수를 전달할 수 있습니다. 예를 들어, 링커로 -Wl,-Map,output.map전달 -Map output.map합니다. GNU 링커를 사용할 때,`-Wl, -Map = output.map '과 같은 효과를 얻을 수 있습니다.

남자 ld :

-rpath = dir

런타임 라이브러리 검색 경로에 디렉토리를 추가하십시오. ELF 실행 파일을 공유 객체와 연결할 때 사용됩니다. 모든 -rpath 인수는 연결되어 런타임 링커로 전달되어 런타임 링커에서이를 사용하여 런타임에 공유 객체를 찾습니다. -rpath 옵션은 링크에 명시 적으로 포함 된 공유 객체에 필요한 공유 객체를 찾을 때도 사용됩니다.


2
마지막에 제목에 점 문자가 누락되지 않았습니까?
Celdor

답변:


278

-Wl,xxx위한 옵션 GCC가 받는 인수 공간 구분 된 목록으로 토큰 쉼표로 구분 통과 링커 . 그래서

gcc -Wl,aaa,bbb,ccc

결국 링커 호출이됩니다

ld aaa bbb ccc

귀하의 경우에는 " ld -rpath ." 라고 말하고 이를 gcc에 전달합니다. -Wl,-rpath,.또는 다음과 같은 반복 인스턴스를 지정할 수 있습니다 -Wl.

gcc -Wl,aaa -Wl,bbb -Wl,ccc

aaa와 두 번째 사이에는 쉼표가 없습니다 -Wl.

또는 귀하의 경우에는 -Wl,-rpath -Wl,..


5
오, 이제는 링커에 물건을 전달하는 동안 옵션이나 인수 사이에 차별이 없으며 문자열 일뿐입니다. 따라서 두 번째 -Wl은 중복입니다! 감사합니다 :)
Blub

29
@Blub : 중복되지 않습니다! 그것은 또 다른 형태로, 당신은 -Wl,-rpath,. 또는 당신은 말한다 -Wl,-rpath -Wl,.. 정확하게 둘 중 하나는 아무것도 생략 할 수 없습니다.
Kerrek SB

OS X에서 clang & ld64를 사용하여 rpath를 설정하는 데 성공한 사람이 있습니까?
ben-albrecht

여러 경로를 지정하려면 구문이 어떻게 표시됩니까? -Wl,-rpath -Wl,. -Wl,-rpath -Wl,/my/lib?
Hintron

1
@Hintron : 예 -Wl,-rpath,dir1,-rpath,dir2또는 -Wl,-rpath=dir1,-rpath=dir2.
Kerrek SB

63

당신은 또한 쓸 수 있습니다

-Wl,-rpath=.

성가신 공간을 없애기 위해. 추가 쉼표를 추가하는 것보다 읽기 쉽습니다 (ld에 전달되는 것입니다).


3
에서 gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options 아래 -Wl,option" 는 GNU 링커를 사용하는 경우 ., 당신은 또한 -Wl, -map = output.map와 같은 효과를 얻을 수있다" 나에게 이것은 GNU 링커 이외의 링커를 사용하면 =구문이 지원되지 않을 수 있음을 나타내는 것 같습니다 .
Hintron

39

다른 것. -L 옵션 지정해야 할 수도 있습니다. 예 :

-Wl,-rpath,/path/to/foo -L/path/to/foo -lbaz

또는 다음과 같은 오류가 발생할 수 있습니다

ld: cannot find -lbaz

10

맨 페이지는 꽤 분명합니다. 링커에 두 개의 인수 ( -rpath.)를 전달하려면 다음을 작성할 수 있습니다.

-Wl,-rpath,.

또는 대안 적으로

-Wl,-rpath -Wl,.

-Wl,-rpath .당신이 제안한 주장 은 제 생각에 맞지 않습니다. gcc는 두 번째 인수 ( .)가 정상적으로 해석되는 대신 링커에 전달 되어야한다는 것을 어떻게 알 수 있습니까? 그것을 알 수있는 유일한 방법은 가능한 모든 링커 인수에 대한 내부 지식이 있으면 그 -rpath뒤에 인수 가 필요 하다는 것을 알았 습니다.


gcc가 인수를 분석한다고 생각할 수 없으며, 의미가없는 경우 자동으로 그룹화됩니다.
Blub
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.