Opensuse tumbleweed 带有 glibc2.29,因此系统中的其他所有内容都依赖于它。
但是,我有 CrashPlanDesktop,它最多需要 2.27。
我很容易找到了一个 2.27 的 opensuse repo。
但是,尝试安装它会导致:
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 fc 6d a0 1d 3c 50 4a e0 5a 6b 48 18 f7 b9 ab
glibc 是向后兼容的,因此为在 glibc 2.27 上工作而构建的代码应该在 glibc 2.29 上继续工作。
为了实现向后兼容,glibc 使用符号版本控制来标记何时引入函数。如果一个函数改变了行为(特别是当它改变原型时),将为该版本引入一个新的符号版本。但是使用旧 glibc 构建的代码(取决于旧行为)仍将绑定到具有旧行为的旧符号版本。
大多数 Linux 发行版并不真正支持并行安装多个 glibc 版本,因为它们必须安装在包含完整版本的路径中(库本身的名称,称为“SONAME”,对于所有 glibc 版本都是相同的,所以不能单独使用来区分它们。)但是在决定哪个二进制文件使用哪个二进制文件时存在问题。因此,每个库版本都需要单独的加载器(动态链接器),但是在为每个版本构建二进制文件时需要设置解释器(或在现有二进制文件上修补解释器)。简而言之,可以安装多个版本的glibc,但它是一个复杂的设置,使用起来真的很痛苦。
如果您的应用程序确实需要 glibc 2.27 并且不适用于 glibc 2.29(但是,如上所述,这应该可以工作,因此这将是 glibc 2.29 中的一个错误),那么您最好的选择是在 Linux 发行版上运行它默认提供 glibc 2.27。
如果无法更改主机的 Linux 发行版,请考虑在容器中运行您的应用程序,并从具有适当 glibc 版本的发行版构建容器映像。
实际上,我能够解决这个下载 Electron 2.0.8、从存档中提取 libnode.so 并将 /usr/local/crashplan/electron/libnode.so 替换为 electron 2.0.8 zip 中的问题的问题。
我的系统是 Debian,但我想这也可能适用于 OpenSuse。
(这当然是非官方的,不受 Code42 或其他任何人的支持)