我想发布一个我开发的应用程序,作为Linux和Windows的业余爱好。此应用程序依赖于boost(以及可能的其他库)。这种应用程序(国际象棋引擎)的标准是只提供一个可执行文件,可能还有一些辅助文件。
我认为静态链接库是个好主意,因此可执行文件不会有任何依赖。因此,最终用户可以将可执行文件放在目录中并开始使用它。
然而,在线进行一些研究时,我发现了一些关于静态链接库的负面评论,有些人甚至认为具有静态链接库的应用程序几乎不可移植,这意味着它只能在我的高度相似系统系统上运行。 / p>
那么静态链接库的优点和缺点是什么?
我已经知道可执行文件会更大。但我不明白为什么它会使我的应用程序不那么便携。
答案 0 :(得分:5)
优点:
没有依赖。
缺点:
内存使用率更高,因为操作系统无法再使用库的共享副本
如果需要更新库,则需要重新构建应用程序。这对于那些有安全修复的图书馆来说非常重要。
当然,可移植性的一个更大问题是缺乏源代码分发。
答案 1 :(得分:1)
假设您包含的静态库“A”依赖于函数“B”。如果目标系统无法满足此依赖关系,则程序将无法运行。
但是如果您使用动态链接,用户可以安装另一个版本的库“A”,它使用函数“C”而不是“B”,因此它可以成功运行。
答案 2 :(得分:0)
如果您静态链接库,除非您添加智能也检查用户系统中已链接的库,否则您将锁定应用程序以使用这些版本的库,直到您更新可执行文件。发生安全漏洞,并发生更新。 (对于国际象棋引擎,可能没有太多问题,但谁知道。)
答案 3 :(得分:0)
对于动态链接的库,如果库说X,则链接与用户系统不可用,您的代码崩溃,让最终用户不知所措。
然而,在静态库的情况下,所有内容都融合到可执行文件中,因此上述情况可能不会发生,但可执行文件会非常笨重。
然而,dynamic loading可以消除动态链接库中的上述问题。