У нас есть кодовая база, разбитая на статические библиотеки. К сожалению, библиотеки имеют циклические зависимости; например, libfoo.a
зависит от libbar.a
и наоборот.
Я знаю, что «правильный» способ справиться с этим - использовать опции компоновщика --start-group
и --end-group
, например:
g++ -o myApp -Wl,--start-group -lfoo -lbar -Wl,--end-group
Но в наших существующих файлах Makefile проблема обычно решается так:
g++ -o myApp -lfoo -lbar -lfoo
(Представьте, что это расширено до ~ 20 библиотек со сложной взаимозависимостью.)
Я проходил через наши Make-файлы, меняя вторую форму на первую, но теперь мои коллеги спрашивают меня, почему ... И помимо «потому что это чище» и смутное ощущение, что другая форма опасна, У меня нет хорошего ответа.
Итак, может ли связывание одной и той же библиотеки несколько раз когда-либо создать проблему? Например, может ли ссылка потерпеть неудачу с многократно определенными символами, если один и тот же .o будет введен дважды? Или есть какой-то риск, что мы могли бы получить две копии одного и того же статического объекта, создав тонкие ошибки?
По сути, я хочу знать, существует ли какая-либо вероятность сбоев во время соединения или во время выполнения при многократном соединении одной и той же библиотеки; и если да, то как их вызвать. Спасибо.