技术解析

为什么如今的库还会被编译成 shared library 来用?内存和磁盘空间都已经足够了呀
0
2021-06-22 07:48:16
idczone

主要是历史原因吗?是不是还有其他的理由?


足够不代表可以随意浪费,当节约的成本几乎为 0 的时候为什么还要浪费?

版本管理等,编译时间等? golang 不就是全静态编译链接了吗

想起了被 node_modules 支配的恐惧,,,

为什么不用 shared lib,反而要采用浪费内存和磁盘的方法?

底层库的 hotfix/upgrade 不会牵一发而动全身
Windows hook
LGPL
obj/linker 的兼容性
等等

哦 我是觉得相对它的收益 成本有点高。作为库的使用者,得保证开发和生产环境的这些依赖版本都一致。还是很痛苦的。

改一个库的功能,把库替换了就好了,就不用把使用这个库的程序再重新编译一次

https://docs.microsoft.com/en-us/windows/desktop/dlls/advantages-of-dynamic-linking

我很喜欢 go 呀 但是有很多有现有 c 库的情况就很尴尬。没太试过用 go 调用 c 不知道好不好

想起了被 node_modules 支配的恐惧
::doge::

如果编译成 static library 的话也是不用重新编译的 只是打包一下

哈哈 package-lock.json

如果操作系统的 runtime 打个补丁,需要重新安装所有的程序。还是说每个程序都静态链接一份操作系统?

库克:mmp。
安卓:内存可能只够开个 QQ。

并不够,比如 office 软件要都搞成静态链接,开了这个你就不用干别的了

别开玩笑,你想折腾死那些官方源和镜像源吗(笑哭)

有道理

我二了

我觉得对于客户端程序动态链接是有必要的,而对于服务端的程序则比较适合使用静态链接的程序

开玩笑吧。比如 windows 操作系统,你看有多少 dll 文件,你要静态链接了,编译一次得多久,而且你的内存能放得下不

很多是为了热更的

作为用户还是喜欢普通应用层软件静态链接,下一个可执行文件到处都能跑。

1. 并不够
2. 修改维护

glibc:我现在要修一个 BUG,请问你准备更新几个软件呢

仔细想了下。像底层库更新这种情况的话,用动态库确实可以不用让依赖它的库重新打包。如果接口和行为没有改变的话是很不错的,但是也是可能带来兼容性问题。比如,底层库做了个 breaking change,那后续的库如果不改动的话也不能跑了。目前这种情况主要是包管理器来做依赖检查,然后决定你不是能更新某个底层库的。所以我觉得各有利弊吧。

不说磁盘,内存这玩意不管多大都是稀缺资源
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服