我将开始一个新的 C++ 项目,该项目将依赖于一系列库,包括 Boost 库、log4cxx 或 google 日志库的一部分——并且随着项目的发展,其他项目也会发展(我还不能预料到) .
它必须在 32 位和 64 位系统上运行,很可能在一个非常多样化的 Linux 环境中,我不希望拥有所有必需的库或 su 权限。
我的问题是,我应该通过动态或静态链接到所有这些库来构建我的应用程序吗?
笔记:
(1) 我知道静态链接在开发过程中可能会很痛苦(更长的编译时间、32 位和 64 位的交叉编译、向下依赖链以包含所有库等),但在测试期间要容易得多 -只需移动文件并运行。
(2) 另一方面,动态链接接缝在开发阶段更容易 - 编译时间短,(真的不知道如何处理从我的 32 位开发环境到 64 位库的动态链接),没有依赖链的喧嚣。另一方面,新版本的部署可能很难看——尤其是在需要新库时(请参阅上面的条件,即在目标机器上没有 su 权限,也没有这些库可用)。
(3) 我已经阅读了有关该主题的相关问题,但无法真正弄清楚哪种方法最适合我的情况。
结论:
- 谢谢大家的意见!
- 我可能会使用静态链接,因为:
- 更容易部署
- 在 perf 期间可预测的性能和更一致的结果。测试(看这篇论文:http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- 正如所指出的,静态与动态编译的大小和持续时间似乎并没有那么大的差异
- 更容易和更快的测试周期
- 我可以保留所有开发人员。在我的开发中循环。机器