我正在使用 g++ 编译和链接一个由大约 15 个 c++ 源文件和 4 个共享对象文件组成的项目。最近,链接时间增加了一倍多,但我没有可用的 makefile 的历史记录。有没有办法分析 g++ 以查看链接的哪一部分花费了很长时间?
Edit:当我注意到 makefile 一直使用 -O3 优化后,我通过删除该开关成功地将链接时间减半。有什么好方法可以让我无需反复试验就能找到这个吗?
Edit:我实际上对分析 ld 的工作原理并不感兴趣。我有兴趣了解如何匹配特定命令行开关或目标文件的链接时间的增加。
分析g++
将会被证明是徒劳的,因为g++
不执行链接,链接器ld
does.
分析ld
也可能不会向您显示任何有趣的内容,因为链接时间通常由磁盘 I/O 主导,如果您的链接不是,您将不知道如何处理分析数据,除非您了解ld
内部结构。
如果您的链接时间很明显,并且链接中只有 15 个文件,则您的开发系统可能存在问题 [1];要么它的磁盘已耗尽并不断重试,要么您没有足够的内存来执行链接(链接通常是 RAM 密集型的),并且您的系统会疯狂地交换。
假设您使用的是基于 ELF 的系统,您可能还希望尝试新的gold
链接器(binutils 的一部分),通常比 GNU 快几倍ld
.
[1] 我的典型链接涉及 1000 个对象,生成 200+MB 的可执行文件,并在 60 秒内完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)