我有一个项目,在链接时非常缓慢(约2分钟,我觉得这很慢)。我知道有更快的链接器,例如gold或lld,但我无法更改链接器。
我的代码中使用了许多C++11模板,我怀疑一些模板代码可能会在多个目标文件中重复实例化,但我不知道如何查找是否属实。
我想知道是否有一种方法可以像分析程序一样分析整个链接阶段,尝试找到瓶颈。例如,一个工具可以检查一个符号在不同的目标文件中出现了多少次(不必要地)并在链接时被丢弃,这可以帮助我找出哪些模板代码可能是原因。关于目标文件中重复的符号只是我的猜测 - 我需要一种基于证据的方法。然后根据这个发现,我将考虑如何改进我的代码以减少链接时间。
我使用CMake,GNU g++和ld作为我的构建工具,并在Linux平台上工作。
谢谢。
我的代码中使用了许多C++11模板,我怀疑一些模板代码可能会在多个目标文件中重复实例化,但我不知道如何查找是否属实。
我想知道是否有一种方法可以像分析程序一样分析整个链接阶段,尝试找到瓶颈。例如,一个工具可以检查一个符号在不同的目标文件中出现了多少次(不必要地)并在链接时被丢弃,这可以帮助我找出哪些模板代码可能是原因。关于目标文件中重复的符号只是我的猜测 - 我需要一种基于证据的方法。然后根据这个发现,我将考虑如何改进我的代码以减少链接时间。
我使用CMake,GNU g++和ld作为我的构建工具,并在Linux平台上工作。
谢谢。
--trace
并查看输出,了解输入文件的处理速度(以及处理顺序,特别是如果您有静态库)如何?这是一个好的开始。 - Vladislav Ivanishin