В статическом случае это на самом деле не имеет значения, потому что вы на самом деле не связываете статические библиотеки - все, что вы делаете, это упаковываете несколько объектных файлов в один архив. Все, что вам нужно, это скомпилировать ваши объектные файлы, и вы можете сразу создавать статические библиотеки.
Ситуация с динамическими библиотеками более запутанная, есть два аспекта:
Общая библиотека работает точно так же, как статическая библиотека (за исключением общих сегментов, если они присутствуют), что означает, что вы можете просто сделать то же самое - просто связать свою общую библиотеку, как только вы получите объектные файлы. Это означает, что, например, символы из libDA будут отображаться как неопределенные в libDB
Вы можете указать библиотеки для ссылки в командной строке при связывании общих объектов. Это имеет тот же эффект, что и 1., но помечает libDB как нужную libDA.
Разница в том, что если вы используете первый способ, вы должны указать все три библиотеки (-lDA, -lDB, -lDC) в командной строке при связывании исполняемого файла. Если вы используете последний, вы просто указываете -lDC, и он автоматически вытягивает другие во время соединения. Обратите внимание, что время ссылки - непосредственно перед запуском вашей программы (что означает, что вы можете получить разные версии символов, даже из разных библиотек).
Это все относится к UNIX; Windows DLL работает совсем по-другому.
Изменить после уточнения вопроса:
Цитата из ld
справочного руководства.
Компоновщик будет искать только архив
один раз, в том месте, где это
указано в командной строке. Если
архив определяет символ, который был
неопределен в некотором объекте, который
появился перед архивом на
командной строки, компоновщик будет включать
соответствующие файлы из
архив. Тем не менее, неопределенный символ
в объекте, появляющемся позже на
командная строка не вызовет компоновщик
для поиска в архиве снова.
Смотрите опцию `- (', чтобы узнать способ форсирования
компоновщик для поиска в архивах несколько
раз.
Вы можете перечислить один и тот же архив несколько
раз в командной строке.
Этот тип поиска в архиве
стандарт для линкеров Unix. Однако если
вы используете `ld 'в AIX, обратите внимание, что
это отличается от поведения
компоновщик AIX.
Это значит:
Любая статическая библиотека или объект, зависящий от другой библиотеки, должны быть помещены перед ним в командной строке. Если статические библиотеки зависят друг от друга по кругу, вы можете, например,. используйте параметр командной строки -(
или поместите библиотеки в командную строку дважды (-lDA -lDB -lDA
). Порядок динамических библиотек не имеет значения.