편의상 아래 관련 맨 페이지를 추가했습니다.
내 (오해) 먼저 이해 :로 옵션을 분리 해야하는 경우 ,
두 번째 -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
뒤에 인수 가 필요 하다는 것을 알았 습니다.