управление большой статической библиотекой C ++

0

Я сотрудничаю с проектом C++ с примерно 100 000 строк кода, который сильно переплетается и строит в две библиотеки библиотеку "util" и "физическую" библиотеку. Получающиеся в результате файлы lib чрезвычайно велики, размер 265Mb/1.2Gb при компиляции с помощью отладочных символов, но даже без них - 161Mb/700Mb. Затем они используются в 30 различных исполняемых файлах.

Проблемы в том, что отладка становится очень сложной: вы меняете одну строку, а затем один исполняемый файл занимает 30 секунд на мощной машине с SSD.

Наиболее очевидной стратегией управления этим является разделение файла lib на многие. Сколько, т.е. Какой идеальный размер для файла lib? Есть ли что-то неправильное в том, чтобы расщепляться только в алфавитном порядке? (т.е. все файлы.o, начинающиеся с a или A, переходят на libphysicsA.a и т.д.)?

  • 2
    Разумной стратегией будет разделение библиотеки на логические группы функций ( например, матричные манипуляции, преобразования, алгоритмы минимизации и т . Д. ). Использование алфавитного порядка в качестве критерия расщепления может привести к путанице (и нет реальной гарантии, что первые буквы всех функций имеют равномерное распределение:]). В любом случае, расщепление может или не может привести к несколько более быстрому связыванию, но компиляция, вероятно, займет то же время (если ваша среда сборки поддерживает базовые инкрементные сборки).
  • 0
    Я согласен с Eitan о том, как разбивать файлы. Сделайте его легким для понимания, и, вероятно, он также будет быстрее связываться. Кстати, время для исполняемого файла тратится в основном на компиляцию или компоновку? Если это компиляция, может ли это быть из-за массового использования шаблонов? Иногда это приводит к двойной компиляции больших шаблонных классов. Как это происходит в проекте, в котором я участвую ... -.-
Показать ещё 2 комментария
Теги:
static-libraries

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню