信息比较零散,我也没有找到比较完整的解释
系统调用(System Call Interface)是比较稳定的,也就是说你用到的系统调用大概率在十年前的内核上都有。这也是 docker 能好用的原因之一。
目前看来比较容易影响的是 glibc,因为它不推荐使用静态链接,主要涉及 libc.so.6 和 ld.so ,前者必须跟后者版本严格一致,后者通常通过 interpreter path 显式指定使用系统提供的版本。你也没法控制编译器不使用新版 glibc 新增的符号。
另外两个基础库 libstdc++.so 和 libgcc_s.so 倒是可以选择静态链接,问题不大。
如果能用 musl-staic 或者像 go 那样完全不依赖 glibc 也是很好移植的。
所以通常做可移植的做法是把所有用到的 so(包括 glibc)全打包到程序目录下,用 patchelf 修改 interpreter path 和 rpath 。
- THE END -
最后修改:2022年10月27日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://blog.melulu.top/?p=266
共有 0 条评论