Каковы параметры командной строки --start-group и --end-group? - PullRequest
71 голосов
/ 13 апреля 2011

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

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

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

1 Ответ

84 голосов
/ 13 апреля 2011

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

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

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

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

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

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

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

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

...