,例如,我的操作系统是Ubuntu 18.04,我在此系统上建立了基于Ubuntu 24.04的图像。在图像构建过程中,我在图像中编写了一个C程序P。后来,我在Ubuntu 18.04上运行此容器和程序P。该程序崩溃等问题是否有可能? 我的假设是可能发生程序崩溃。在编译过程中,C程序可能与Ubuntu 24.04的较高版本的GLIBC有关。运行程序时,Chatgpt告诉我,动态链接将使用容器文件系统中的GLIBC。现在,如果GLIBC调用的函数在Ubuntu 18.04中不存在的系统调用(我的理解是,该程序在容器中进行的系统调用直接请求到主机),这可能会导致程序错误或崩溃?
有可能遇到诸如程序崩溃的问题吗?
yes
chatgpt告诉我,动态链接将使用来自容器的文件系统的glibcdynamic链接将使用the binary时使用的任何库。
如果二进制是在容器中启动的,则将是容器的库。如果二进制主机在主机上启动,则将是主机库。
如果GLIBC调用ubuntu 18.04中不存在的系统调用功能(我理解是,该程序中的程序中的系统调用直接请求给主机),这是否可能导致程序出错或崩溃? KERNEL有系统呼叫。内核是在Docker和Host之间共享的。在两个环境中,“存在”相同的系统调用。
如果您将程序与库链接起来,例如glibc,并使用该库中存在但不存在该库中的某些其他版本中的符号或符号,则通常会看到ynamic链接的错误(请参阅 man ld.so
/lib64/libc.so.6:版本`glibc_2.14'找不到,,
error/lib/x86_64-linux-gnu/libc.so.6:version`glibc_2.34'找不到
Https://superuser.com/questions/537683/how-to-fo-fix-lib-x86-64-linux-gnu-libc-so-so-6-version-version-glibc-2-14-not-not-not-not-not-found。这些错误不是特定于glibc的,它可以是任何共享库。 请参阅:
兼容是多么不同的版本的glibc?,我可以如何链接到特定的glibc版本?。