glibc 需要操作系统为 2.29,而我有 1 个应用程序需要 2.27 max 如何解决这两个问题?

glibc 需要操作系统为 2.29,而我有 1 个应用程序需要 2.27 max 如何解决这两个问题?

Opensuse tumbleweed 附带了 glibc2.29,因此系统中的其他所有内容都依赖于它。

但是,我有 CrashPlanDesktop,它最多需要 2.27。

我轻松找到了 2.27 的 opensuse 存储库。

但是,尝试安装它会导致以下结果:

rpm: /lib64/libc.so.6: version `GLIBC_2.27' not found (required by /usr/lib64/libpopt.so.0)

我该如何解决这个问题?

CrashPlanDesktop 必须与服务进行通信。

我可以使用 chroot 或其他东西吗?

我可以将 rpm 解压到包含可执行文件的文件夹中吗?

另外我收到了这条消息,但不知道这意味着什么

代码:d6 21 12 e3 c4 a7 81 1d 7a 48 5f 26 5f 37 b8 f1 ed f5 f8 7c 86 e8 25 4c a5 5a 29 b7 45 41 0c cc a7 76 95 b4 93 d9 d8 5e 4c b8 f4 95 11 c4 9f 2c FC 6d a0 1d 3c 50 4a e0 5a 6b 48 18 f7 b9 ab

答案1

我实际上能够解决这个问题:下载 Electron 2.0.8,从存档中提取 libnode.so,然后将 /usr/local/crashplan/electron/libnode.so 替换为 Electron 2.0.8 zip 中的 libnode.so。

我的系统是 Debian,但我想这也适用于 OpenSuse。

(这当然是非官方的,不受 Code42 或其他任何人的支持)

答案2

glibc 向后兼容,因此为在 glibc 2.27 上运行而构建的代码应该继续在 glibc 2.29 上运行。

为了实现向后兼容性,glibc 使用符号版本控制来标记函数何时被引入。如果一个函数改变了行为(特别是当它改变原型时),将为该版本引入一个新的符号版本。但是使用较旧的 glibc(取决于较旧的行为)构建的代码仍将与较旧的行为绑定到较旧的符号版本。

大多数 Linux 发行版并不真正支持并行安装多个 glibc 版本,因为它们必须安装在包含完整版本的路径中(库本身的名称称为“SONAME”,对于所有 glibc 版本都是相同的,因此不能单独使用来区分它们。)但是,在决定哪个二进制文件使用哪个二进制文件时就出现了问题。因此,您需要为每个库版本单独的加载器(动态链接器),但是您需要在为每个版本构建二进制文件时设置解释器(或在现有二进制文件上修补解释器)。简而言之,可以安装多个版本的glibc,但它的设置很复杂,而且用起来真的很痛苦。

如果您的申请真的需要 glibc 2.27 并且不能与 glibc 2.29 一起使用(但是,如上所述,这应该可以工作,所以这将是漏洞(在 glibc 2.29 中),那么最好的选择是在默认情况下附带 glibc 2.27 的 Linux 发行版上运行它。

如果无法更改主机的 Linux 发行版,请考虑在容器中运行应用程序,并从具有适当版本的 glibc 的发行版构建容器映像。

相关内容