【发布时间】:2014-08-24 14:38:49
【问题描述】:
我正在合作开发一个包含大约 100,000 行代码的 C++ 项目,这些代码紧密交织并构建成两个库:“util”库和“physics”库。生成的 lib 文件非常大,使用调试符号编译时大小为 265Mb/1.2Gb,但即使没有它们也是 161Mb/700Mb。然后将它们用于大约 30 种不同的可执行文件中。
问题在于调试变得非常困难:更改一行,然后在配备 SSD 的强大机器上生成单个可执行文件需要 30 秒。
最明显的管理策略是将 lib 文件拆分为多个。有多少,即 lib 文件的理想大小是多少?按字母顺序拆分有什么问题吗? (即所有以 a 或 A 开头的 .o 文件都转到 libphysicsA.a 等)?
【问题讨论】:
-
一个明智的策略是将库拆分为功能的逻辑组(例如矩阵操作、转换、最小化算法,等)。使用字母顺序作为拆分标准会令人困惑(并且实际上并不能保证所有函数的第一个字母具有均匀分布 :] )。无论如何,拆分可能会或可能不会导致链接稍快一些,但编译可能会花费相同的时间(假设您的构建环境支持基本的增量构建)。
-
我同意 Eitan 关于如何拆分文件的观点。使其易于理解,并且可能链接起来也会更快。顺便说一句,可执行文件的时间主要花在编译或链接上吗?如果是编译,会不会是因为大量使用了模板?这有时会迫使大型模板类的双重编译。因为它发生在我参与的项目中...... -.-
-
bartgol,是的,大量使用模板,所以编译速度很慢,但是即使只是“ar”命令也需要一些时间,因为它需要将 Gb 转储到磁盘上。我希望有一些神奇的解决方案...... :)
-
这个问题对于 Stack Overflow 来说似乎过于面向设计/讨论,这是针对可以有明确答案的编码的具体问题。讨论高级设计概念和最佳实践更适合Software Engineering。请阅读this meta post了解更多信息。
标签: c++ linux unix static-libraries