如何在 Linux 上将 libc 的高级版本与我的二进制文件打包在一起

How to pack advanced version of libc with my binary on Linux

提问人:ipcamit 提问时间:10/31/2023 更新时间:10/31/2023 访问量:35

问:

我正在编写一个科学库,它使用来生成衍生物,并将所有内容捆绑在一个二进制共享文件中。为了在 Linux x86_64 上分发它,我使用 patchelf 将它与我的系统 libc 一起打包并给出适当的 rpath。我已经在版本低于我的系统的 Linux 系统上进行了测试,并且链接 libc 工作正常。

但是,当我在 Linux ppc64le Power9 CPU 上尝试相同的方法时,首先在 docker 容器 (clang 12.0.1) 中使用 libc 2.28 进行编译,然后在带有 libc 2.17 的 HPC 上修补并运行它,我收到以下错误:

./libdescriptor.so: /lib64/ld64.so.2: version `GLIBC_2.22' not found (required by libdescriptor/./../libdescriptor.libs/libstdc++-c4342a24.so.6.0.25)
./libdescriptor.so: /lib64/ld64.so.2: version `GLIBC_2.23' not found (required by libdescriptor/./../libdescriptor.libs/libm-2-a7087b3e.28.so)
./libdescriptor.so: /lib64/ld64.so.2: version `GLIBC_2.23' not found (required by libdescriptor/./../libdescriptor.libs/libc-2-fde502c1.28.so)
./libdescriptor.so: /lib64/ld64.so.2: version `GLIBC_2.22' not found (required by libdescriptor/./../libdescriptor.libs/libc-2-fde502c1.28.so)

我做错了什么?2.23 和 2.22 glibc 从何而来?

linux clang glibc powerpc

评论

1赞 n. m. could be an AI 10/31/2023
“将它与我的系统 libc 一起打包并给出适当的 rpath”这是相当危险的。Libc 不仅仅是 .混合和匹配不同版本的 libc 部分会带来麻烦。libc.so.6
0赞 n. m. could be an AI 10/31/2023
对于这个问题,“我做错了什么?即使假设您原则上可以摆脱这种不受支持的打包应用程序的方法,也很难判断您做错了什么,因为我们对您正在做的事情只有模糊的描述。细节决定成败,细节匮乏。
0赞 ipcamit 10/31/2023
我曾尝试寻找其他方法来使二进制文件可移植,但无济于事。问题是,我必须使用相当新的编译器套件进行编译,因为 Enzyme 仅适用于此类版本,但它将用于具有相当旧的 linux 发行版的 HPC。你能指出更好的方向吗?还应该添加哪些其他细节?
0赞 n. m. could be an AI 10/31/2023
您可以在旧发行版上构建新的编译器(在 docker 中设置它,下载 gcc 源代码,配置、制作、安装)。这将是实现目标的最简单方法。
0赞 ipcamit 11/1/2023
我尝试了与 manylinux2014 映像和预构建 clang 二进制文件类似的东西,但无济于事。将再次尝试从头开始构建 llvm

答: 暂无答案