Каковы параметры командной строки --start-group и --end-group?


какова цель этих параметров командной строки? Пожалуйста, помогите расшифровать значение следующей командной строки:

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

по-видимому, это имеет какое-то отношение к связыванию, но руководство GNU тихо, что именно означает группировка.

1 62

1 ответ:

он предназначен для разрешения циклических зависимостей между несколькими библиотеками (перечисленными между -( и -)).

со ссылкой на почему порядок, в котором библиотеки связаны иногда вызывают ошибки в GCC? или man ld http://linux.die.net/man/1/ld

-(архивы-) или --start-groupархивы--end-group

The архивы должен быть список архивировать файлы. Это могут быть либо явные имена файлов, либо параметры-l.

указанные архивы просматриваются повторно до тех пор, пока не будут созданы новые неопределенные ссылки. Обычно поиск архива выполняется только один раз в том порядке, который указан в командной строке. Если символ в этом архиве необходим для разрешения неопределенного символа, на который ссылается объект в архиве, который появляется позже в командной строке, компоновщик не сможет разрешить эту ссылку. От группируя архивы, все они будут повторно просматриваться до тех пор, пока не будут разрешены все возможные ссылки.

использование этой опции имеет значительную стоимость производительности. Лучше всего использовать его только тогда, когда возникают неизбежные циклические ссылки между двумя или несколькими архивами.

таким образом, библиотеки внутри группы можно искать новые символы несколько раз, и вам не нужны уродливые конструкции, такие как -llib1 -llib2 -llib1

PS архив означает в основном статическую библиотеку (*.a файлы)