Он предназначен для разрешения круговых зависимостей между несколькими библиотеками (перечисленными между -(
и -)
).
Цитирование Почему порядок, в котором библиотеки связаны, иногда вызывает ошибки в GCC? или man ld
http://linux.die.net/man/1/ld
-(
архивы -)
или --start-group
архивы --end-group
В архивах должны быть списком архивных файлов. Это могут быть явные имена файлов или параметры -l.
Поиск в указанных архивах выполняется повторно, пока не перестанут создаваться новые неопределенные ссылки. Обычно поиск в архиве выполняется только один раз в порядке, указанном в командной строке. Если символ в этом архиве необходим для разрешения неопределенного символа, на который ссылается объект в архиве, который появляется позже в командной строке, компоновщик не сможет разрешить эту ссылку. Сгруппировав архивы, все они будут подвергаться многократному поиску, пока не будут разрешены все возможные ссылки.
Использование этой опции требует значительных затрат производительности. Лучше всего использовать его только тогда, когда есть неизбежные циклические ссылки между двумя или более архивами.
Итак, библиотеки внутри группы можно искать несколько раз на предмет новых символов, и вам не нужны уродливые конструкции вроде -llib1 -llib2 -llib1
Архив PS означает в основном статическую библиотеку ( *.a
файлы)
-Wl,--verbose
параметр в gcc (он передается--verbose
компоновщику ld). Например , для-ltest
библиотеки:attempt to open /lib/libtest.so failed \n attempt to open /lib/libtest.a failed \n attempt to open /usr/lib/libtest.so failed \n attempt to open /usr/lib/libtest.a failed \n
. Компоновщик.so
сначала пытается открыть , но потом пытается открыть.a
. Это делается в каждом каталоге в каталогах поиска библиотеки.