порядок объектных файлов в статической библиотеке

Я знаю, что при связывании с несколькими статическими библиотеками или объектными файлами порядок имеет значение (зависимые библиотеки должны быть перечислены перед их зависимостями). Я хочу знать, применяется ли то же правило при создании файла библиотеки с помощью ar, и порядок в библиотеке имеет значение, или в том же файле .a это не имеет значения.
Я упаковываю более 200 объектных файлов. со сложным графом зависимостей и выполняя

ar rcs mylib.a objs/*.o

значительно проще, чем перечислить их в правильном порядке.

Я использую gcc, если это имеет значение.


person Baruch    schedule 29.12.2011    source источник


Ответы (1)


Порядок в библиотеке раньше имел значение давным-давно.

Это больше не имеет значения в любой системе UNIX старше ~ 15-20 лет. От 1_:

   An archive with such an index speeds up linking to the library
   and allows routines in the library to call each other without
   regard to their placement in the archive.

Большинство нестарых систем UNIX либо создают __.SYMDEF (который содержит указанный выше индекс) автоматически при построении архивной библиотеки, либо создают его в памяти во время компоновки.

person Employed Russian    schedule 29.12.2011
comment
Порядок в библиотеке когда-то имел значение.... - это не обязательно верно из-за порядка инициализации статических объектов C++. - person jww; 22.09.2015