【发布时间】:2011-09-20 00:26:14
【问题描述】:
是否有任何不错的工具可以在 Linux 下使用 g++ 确定最佳静态链接顺序?我熟悉一般问题,包括(如有必要)使用对单个库或 --start-group 和 --end-group 的重复引用来解决循环依赖关系,但如果可能的话,我想要什么,是一个工具,它将获取一堆 .a 文件并为它们输出一个好的静态链接顺序,如有必要重复库,同时将重复保持在最低限度。
背景:我正在开发一个包含大约 800K 行继承的 c++ 代码的项目,并试图将其重构为更小、更易于管理的块。一些现有的文件是巨大的单体——今天我一直在努力处理一个定义了 113 个类和结构的 34K 行 .h 文件。许多类几乎完全内联定义在 .h 文件中。当我把它分成更小的块,并将一些实现代码迁移到 .cpp 文件中时,Linux 上所需的链接顺序不断变化。这可能是因为每个包含 .h 文件的库都用于编译它自己需要的任何类的实现,现在它们必须链接到单个库文件中的通用实现。从长远来看,我们可能会将一些类重新组织到不同的库中,并打破一些依赖链,但现在依赖关系非常复杂,我正试图将可能改变行为的代码扰动降到最低。我不希望每次更改时都必须手动找出正确的链接顺序。有什么建议吗?
【问题讨论】: