[gcc] 이해가 안 돼요 -Wl, -rpath -Wl,

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

내 (오해) 먼저 이해 :로 옵션을 분리 해야하는 경우 ,두 번째 -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 옵션은 링크에 명시 적으로 포함 된 공유 객체에 필요한 공유 객체를 찾을 때도 사용됩니다.



답변

-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,..


답변

당신은 또한 쓸 수 있습니다

-Wl,-rpath=.

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


답변

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

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

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

ld: cannot find -lbaz


답변

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

-Wl,-rpath,.

또는 대안 적으로

-Wl,-rpath -Wl,.

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


답변