12

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

我认为静态链接库是个好主意,这样可执行文件就不会有任何依赖关系。所以最终用户可以将可执行文件放在一个目录中并开始使用它。

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

那么静态链接库的优缺点是什么?

我已经知道可执行文件会更大。但我不明白为什么它会降低我的应用程序的可移植性。

4

4 回答 4

6

优点:
没有依赖。

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

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

于 2010-03-16T15:37:05.143 回答
1

假设您包含的静态库“A”依赖于函数“B”。如果目标系统无法满足此依赖关系,那么您的程序将无法运行。

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

于 2010-03-16T15:38:25.130 回答
0

With dynamically linked libraries, if the library say X, you have linked with is not available at the user system, your code crashes ungracefully leaving the end user wondering.
Whereas, in the case of static libraries everything is fused into the executable, so a condition like above mayn't happen, the executable however will be very bulky.

The above problem in dynamically linked libraries can however, be eliminated by dynamic loading.

于 2010-03-16T16:01:23.673 回答
0

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

于 2010-03-16T15:38:02.317 回答