У меня есть проект, который очень медленно связывается (~ 2 минуты, и я чувствую, что это медленно). Мне известен более быстрый компоновщик, например gold или lld, но я не могу изменить компоновщик.
Я использовал много шаблонов C ++ 11 в своем коде, и я подозреваю, что некоторый код шаблона может неоднократно создаваться в нескольких объектных файлах, но я понятия не имею, как найти, правда ли это.
Интересно, есть ли способ профилировать всю стадию связывания, например, то, что мы делаем, чтобы профилировать программу и попытаться найти узкое место? Например, инструмент, который я могу использовать для проверки, сколько раз символ (излишне) появляется в разных объектных файлах и затем удаляется во время компоновки, это может помочь мне выяснить, какой код шаблона может быть причиной. Вышеприведенное о повторяющихся символах в объектных файлах - только мое предположение - Мне нужен подход, основанный на доказательствах. Затем, основываясь на этом выводе, я подумаю о том, как улучшить свой код, чтобы сократить время компоновки.
Я использую CMake, GNU g ++ и ld в качестве инструментов для сборки и работаю на платформе Linux.
Спасибо.