Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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