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

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

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



답변

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

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

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

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

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

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

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

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


답변