为什么不使用静态链接更多?

dsi*_*cha 10 linux linker shared-libraries dynamic-linking static-linking

我理解动态链接的好处(旧代码可以自动利用库升级,它更节省空间),但它肯定有缺点,特别是在异构Linux生态系统中.由于系统升级破坏了向后兼容性或将回归引入共享库,因此很难分发"正常工作"的分布式无关二进制文件并使之前工作的程序更容易中断.

鉴于这些缺点,为什么动态链接似乎是如此普遍受欢迎?为什么要找到静态链接的,与发行版无关的Linux二进制文件,即使对于小型应用程序也是如此困难?

zwo*_*wol 14

有三个重要原因:

  1. GNU libc不支持与自身的静态链接,因为它广泛地内部使用dlopen.(这意味着与其他任何东西的静态链接都不太值得,因为如果不替换C库,就无法获得完全静态的二进制文件.)
  2. 分发不支持与其他任何内容的静态链接,因为它增加了当库存在安全漏洞时必须执行的工作量.
  3. 分发对分布不可知的二进制文件没有任何兴趣.他们想要获取源并自己构建它.

您还应该记住,Linux-not-Android软件生态学完全基于源代码.如果您要发送二进制文件而且您不是分发供应商,那么您就是在做错了.

  • 是的,这是真正加剧我的最后一句话.如果我的发行版没有我想要的软件包X的版本,或者我需要将它安装到我的主目录b/c我没有root权限,设置正确的构建环境从源代码编译它是几乎总是痛苦.我宁愿只解压一个静态链接的二进制tarball. (4认同)
  • 请注意,许多商业软件是静态链接的. (3认同)