静态连接图书馆有什么好处和坏处?

我想发布一个我为Linux和Windows开发的应用程序。 这个应用程序依赖于增强(可能还有其他库)。 这种应用程序(国际象棋引擎)的规范是只提供一个可执行文件和可能的一些帮助文件。

我强硬这是一个好主意,静态链接库,使可执行文件没有任何依赖。 因此,最终用户可以将可执行文件放在一个目录中并开始使用它。

然而,在网上做一些研究的时候,我发现了一些关于静态链接库的负面评论,甚至有人认为,静态链接库的应用程序几乎不可移植,这意味着它只能运行在我的高度相似的系统上。

那么静态链接库有什么优点和缺点呢?

我已经知道可执行文件会更大。 但是我不明白为什么它会使我的应用程序变得不便携。

优点:
没有依赖关系。

缺点:
内存使用率更高,因为操作系统不能再使用库的共享副本。
如果库需要更新,您的应用程序需要重建。 对于那些有安全修复程序的库来说,这是非常重要的。

当然,可移植性的一个更大的问题是缺少源代码分发。

假设您所包含的静态库“A”对函数“B”具有依赖性。 如果目标系统不能满足这个依赖关系,那么你的程序将不能运行。

但是如果你使用动态链接,用户可能会安装另一个版本的库“A”,它使用函数“C”而不是“B”,所以它可以成功运行。

如果您静态链接库,除非添加智能来检查用户的系统是否已链接库,否则将锁定应用程序以使用这些库的版本,直到更新可执行文件。 安全漏洞发生,更新发生。 (对于象棋引擎可能没有太多的问题,但谁知道。)

通过动态链接的库,如果库声明X,则链接的链接在用户系统中不可用,则代码崩溃会使最终用户不知所措。
而在静态库的情况下,一切都融合到可执行文件中,因此像上面这样的条件可能不会发生,但可执行文件将非常庞大。

但是动态链接库中的上述问题可以通过动态加载来消除。