C++应用-我应该使用静态或动态联系的图书馆?
-
21-09-2019 - |
题
我要开始一个新C++的项目,这将依赖于一系列的图书馆,包括一部分提高图书馆,log4cxx或谷歌记录图书馆和作为项目的发展其他的以及(我还不能预测).
它将具有运行,在32和64位系统,最有可能在相当不同的Linux的环境,我不期望有所有需要的图书馆可用,也没有苏特权。
我的问题是,应当我建立我的应用程序的动态或静态链接所有这些图书馆?
注:
(1)我知道的静态链接可能是一个痛苦的过发展(较长的编制时间,截编制为32或64位下去的依赖关系链,以包括所有的图书馆,等等),但它很容易在测试-只是移动的文件和运行。
(2)另一方面,动态联缝更容易在发展阶段很短的编制时间,(真的不知道如何处理动态联64位的图书馆从我的32位的开发环境),没有喧嚣与依赖关系链。部署新版本,另一方面可以丑陋的-特别是当新的图书馆都需要(见上述条件没有苏权利的有针对性的机器,也没有这些图书馆可用)。
(3)我已经阅读有关的问题,关于这个主题,但真的不能找出哪种方法最适合我的方案。
结论:
- 谢谢您的输入!
- 我可能会去的静态连接的,因为:
- 更容易的部署
- 可预测性和更一致的结果在perf.测试(看看这个文件:http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- 如指出的,规模和持续时间汇编静与.动态似乎不是这样的一个巨大的差异
- 更容易和更快地测试周期
- 我可以让所有的开发。循环上我的开发。机
解决方案
静电联有一个坏的名声。我们有巨大的硬盘驱动器这些天,非常胖管道。许多旧的论点,有利于动态链接方式不太重要的。
另外,还有一个很好的理由更喜欢静态连接在Linux上过多的平台配置有使其几乎不可能保证你可执行会工作跨越甚至一小部分他们没有静态链接。
我怀疑这不会是一个受欢迎的意见。罚款。但我有11年的经验,部署在Linux的应用程序,直到东西喜欢LSB真的离开,真的延伸它的到达,Linux将继续是更困难的部署应用程序。直到那时,静态链接你的应用程序,如果你要遇到的范围广泛的平台。
其他提示
我可能会使用动态联系在(大多数)的发展,然后变成静态链接的最后阶段的发展以及(所有)的部署。幸运的是,还有一点需要额外时的测试开关自动静联系的图书馆。
这是另一个投票静态链接。我没注意到显着再联系时,为了应用程序。该应用程序在的问题是a-50行控制台应用程序,与多个图书馆,编为一堆出来的普通机器,大多是超级计算机有100到10,000的核心。与静电联的,你知道什么库使用,可以很容易地测试新版本。
在一般情况下,这种方式是,大多数Mac应用程序。这是什么允许安装是简单的复制一个目录到系统中。
最好是离开这的程序,并提供这两个选项中的配/制作的剧本。通常,动态联会有偏好自那时以来,它可以很容易地升级的图书馆必要时,即当安全漏洞,等等。被发现。
注意,如果没有根本的权限来安装的图书馆系统的目录,可以汇编的程序,例如,它将首先看看其他地方为任何需要的动态图书馆,这是通过设置runpath指令中的精灵的二进制文件。你可以指定这样一个目录-路径选择的链接ld。