У меня есть проект, который связывается с g++ и ld примерно за 8 секунд.
Он использует кучу статических библиотек, большая часть кода написана на C++.
Меня интересует общий список советов о том, как сократить время ссылки. Что-нибудь от "не включайте отладочные символы" до "сделайте свой код менее спагетти"
Используете ли вы генерацию кода времени ссылки? Это будет производить более быстрый код, но время компоновки увеличится. Billy ONeal 29.12.2010
8 секунд быстро. Это не похоже на то, о чем стоит беспокоиться. Насколько велик проект? CB Bailey 29.12.2010
Платформа и компилятор? С GCC и binutils gold работает быстрее, чем (классический) ld , и clang может (а может и не быть) быстрее. ephemient 29.12.2010
Я могу выполнить полную сборку и связать свой проект примерно с 800 000 LOC примерно за 10 секунд. David Heffernan 29.12.2010
0,8 миллиона строк кода за 10 секунд? У меня есть отдельные единицы перевода, которые занимают больше времени! Billy ONeal 29.12.2010
Я имел дело с этим в течение многих лет на предыдущей работе. Компоновщик GNU просто имеет серьезные проблемы с производительностью при компоновке большого количества статических библиотек. В какой-то момент время компоновки соответствовало времени компиляции, что показалось нам настолько странным, что мы действительно исследовали это и выяснили.
Вы можете попытаться объединить свои статические библиотеки в "суперобъект" перед связыванием. Вместо такой ссылки:
Обратите внимание, что этот метод дает компоновщику меньше возможностей исключить неиспользуемый объектный код, поэтому ваши двоичные файлы могут несколько увеличиться в размере.
Ответ 2 · рейтинг 4 · engf-010
создайте виртуальный диск, скомпилируйте его и свяжите с жестким диском.
поскольку вы используете много статических библиотек, вы можете создать гигантскую библиотеку, содержащую все эти библиотеки, чтобы в итоге у вас была одна библиотека. удалите все библиотеки из вашего списка библиотек и добавьте гигантскую. Это уменьшает количество открытий файла до 1 для библиотек и может ускорить действия по чтению.
Ответ 3 · рейтинг 2 · Ben Voigt
Отключите оптимизацию всей программы (хотя бы на время разработки). Используйте p-impl для уменьшения зависимостей.
Ответ 4 · рейтинг 1 · Wyatt Anderson
8 секунд - это довольно быстро, если только вы не уверены, что это не займет так много времени. У меня есть проекты, полная перелинковка которых занимает 5-8 минут, поскольку мы не делаем добавочную компоновку в наших релизных сборках. Пробовали ли вы использовать инкрементное связывание (если вы не используете -shared, вы можете использовать -i или -r)?
Ответ 5 · rubenvb
Как насчет компиляции отладочных сборок в виде общих библиотек? Это устранит раздувание символа отладки, поскольку библиотеки импорта крошечные с информацией об отладке или без нее. Возможно, это не лучшее решение, но я думаю, что это существенно сократит время компоновки...
Ответ 6 · Community
Вы можете попробовать использовать clang и lld. От godot документы
Вы также можете использовать Clang и LLD для создания Godot. У этого есть два преимущества по сравнению с настройкой GCC + GNU ld по умолчанию:
LLD связывает Godot значительно быстрее по сравнению с GNU ld или gold. Это приводит к более быстрому времени итерации.