developer tip

--start-group 및 --end-group 명령 줄 옵션은 무엇입니까?

optionbox 2020. 10. 22. 07:57
반응형

--start-group 및 --end-group 명령 줄 옵션은 무엇입니까?


이러한 명령 줄 옵션의 목적은 무엇입니까? 다음 명령 줄의 의미를 해독하는 데 도움을주세요.

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib

분명히 그것은 연결과 관련이 있지만 GNU 매뉴얼은 정확히 그룹화가 의미하는 바를 조용합니다.


여러 라이브러리 ( -(사이에 나열 됨) 간의 순환 종속성을 해결하기위한 것 -)입니다.

인용 라이브러리가 링크 된 순서가 때때로 GCC에서 오류를 일으키는 이유는 무엇입니까? 또는 man ld http://linux.die.net/man/1/ld

-( 아카이브 -) 또는 --start-group 아카이브 --end-group

아카이브는 아카이브 파일의 목록이어야합니다. 명시 적 파일 이름이거나 -l 옵션 일 수 있습니다.

지정된 아카이브는 정의되지 않은 새 참조가 생성되지 않을 때까지 반복적으로 검색됩니다. 일반적으로 아카이브는 명령 줄에 지정된 순서대로 한 번만 검색됩니다. 나중에 명령 줄에 나타나는 아카이브의 개체가 참조하는 정의되지 않은 기호를 확인하는 데 해당 아카이브의 기호가 필요한 경우 링커는 해당 참조를 확인할 수 없습니다. 아카이브를 그룹화하면 가능한 모든 참조가 해결 될 때까지 모두 반복적으로 검색됩니다.

이 옵션을 사용하면 상당한 성능 비용이 발생합니다. 둘 이상의 아카이브 사이에 불가피한 순환 참조가있을 때만 사용하는 것이 가장 좋습니다.

따라서 그룹 내의 라이브러리에서 새 기호를 여러 번 검색 할 수 있으며 다음과 같은 추악한 구성이 필요하지 않습니다. -llib1 -llib2 -llib1

PS 아카이브는 기본적으로 정적 라이브러리 ( *.a파일)를 의미합니다.

참고 URL : https://stackoverflow.com/questions/5651869/what-are-the-start-group-and-end-group-command-line-options

반응형