c 我记得默认是动态编译,参数加 static 可以搞成静态编译,一般在低版本 linux 编译的可以在高版本运行,反过来就跑不起来了,上周末学习了下 go,个人认为 go 当前的处理真的很好(想对比节省内存和磁盘,方便维护才是王道?),编个 go 出来,不用担心各种 glibc 版本依赖问题。(go 新手,有问题欢迎指出哈)
新语言,尤其是这些正处在迅速发展中的语言,在最初版本不提供动态链接这个很好理解。Swift 从 5.0 之前一直不愿声明 ABI 稳定,当时作者解释,一旦 ABI 稳定,那后续语言特性就受制于 ABI 的设计,有一些新语言特性就难以实现了。所以每一版更新,Calling Convention 有变动,旧的动态库就无法兼容了。
静态链接和动态链接只是个[权衡],动态链接有你说的那些优势,静态链接同样也有很多优势。没有版本和依赖问题,容易发布容易维护,这是静态链接最大的优势,在 go 和 rust 的使用场景和生态下,静态链接是更优的选择。