码头化的C++应用程序是否向后兼容早期的内核版本

Are dockerized C++ applications backwards compatible to earlier kernel versions?

本文关键字:内核 版本 C++ 应用程序 是否 码头      更新时间:2023-10-16

假设我有一个C++应用程序在docker容器中运行,使用现代linux发行版(Ubuntu 19.10(以及GCC和linux内核的相关版本。容器本身托管在Ubuntu 19.10上。

我在容器中构建我的应用程序,并静态链接我的所有依赖项,除了系统提供的依赖项,即libc++、libc等。这些依赖项来自底层Docker映像中捆绑的依赖项。据我的应用程序所知,它存在于Ubuntu 19.10中。

然后,我继续在一个旧得多的Linux内核上部署包含我的应用程序二进制文件的Docker映像(比如说无论CentOS 6在使用什么(。

这样做是否存在不兼容(ABI或其他(的风险?

是的,存在风险。您需要检查libc需求,看看它支持什么内核版本。对于大多数软件来说,libc通常是通往内核的网关,除了一些它自己实现系统调用的语言。