【发布时间】:2021-09-28 08:32:26
【问题描述】:
您好,我正在尝试使用 intel mpiifort 来编译我的程序。 make 过程中出现一个错误:
ld:xxx/intel/oneapi/compiler/2021.2.0/linux/bin/intel64/../../bin/intel64/../../lib/icx-lto.so: error loading plugin: /lib64/libc.so.6: version `GLIBC_2.14' not found.
我阅读了这个Multiple glibc libraries on a single host 并且我同时遵守了 glibc-2.17 和 patchelf。然后我输入
patchelf --set-rpath xxx/glibc-2.17/lib/ xxx/intel/oneapi/compiler/2021.2.0/linux/lib/icx-lto.so
和
patchelf --add-needed xxx/glibc-2.17/lib/libc.so.6 xxx/intel/oneapi/compiler/2021.2.0/linux/lib/icx-lto.so
ldd xxx/intel/oneapi/compiler/2021.2.0/linux/lib/icx-lto.so 的结果是
linux-vdso.so.1 => (0x00007fffaa5ff000)
libc.so.6 => xxx/glibc/glibc-2.17/lib/libc.so.6 (0x00007fb1adff8000) librt.so.1 => xxx/glibc/glibc-2.1/lib/librt.so.1 (0x00007fb1addf0000) libdl.so.2 => xxx/glibc/glibc-2.17/lib/libdl.so.2 (0x00007fb1adbec000) libimf.so => xxx/intel/oneapi/compiler/2021.2.0/linux/compiler/lib/intel64_lin/libimf.so (0x00007fb1ad563000) libm.so.6 => xxx/glibc/glibc-2.17/lib/libm.so.6 (0x00007fb1ad265000) libz.so.1 => /lib64/libz.so.1 (0x00007fb1ad032000) libsvml.so => xxx/intel/oneapi/compiler/2021.2.0/linux/compiler/lib/intel64_lin/libsvml.so (0x00007fb1ab534000) libirng.so => xxx/intel/oneapi/compiler/2021.2.0/linux/compiler/lib/intel64_lin/libirng.so (0x00007fb1ab1ca000) libgcc_s.so.1 => xxx/gcc-4.7.4/lib64/libgcc_s.so.1 (0x00007fb1aafb4000) libintlc.so.5 => xxx/intel/oneapi/compiler/2021.2.0/linux/compiler/lib/intel64_lin/libintlc.so.5 (0x00007fb1aad3b000) libpthread.so.0 => xxx/glibc-2.17/lib/libpthread.so.0 (0x00007fb1aab1e000) /lib64/ld-linux-x86-64.so.2 (0x0000003b70a00000)
但是当我重新编译我的程序时它仍然无法正常工作。有人有解决办法吗?
使用ifort 和icc 时实际上出现相同的错误。但是被patchelf --set-interpreter xxx/glibc/glibc-2.17-gcc-4.8.5/lib/ld-linux-x86-64.so.2 --set-rpath xxx/glibc/glibc-2.17-gcc-4.8.5/lib/ xxx/intel/oneapi/compiler/2021.2.0/linux/bin/intel64/ifort解决了
【问题讨论】:
-
您的修补程序
icx-lto.so是否仍能找到/lib64/libz.so.1?我猜你的xxx/glibc/glibc-2.17/lib/中没有libz.so.1。我想这可能没问题,只要 libz 不尝试解决它自己对 /lib64/libc.so.1 的依赖关系。另外,glib 2.14 不是很老吗?也许是时候升级到更新版本的发行版了;当前的 glibc 是 2.33。 -
您永远不应该在具有多个 GLIBC 的机器上使用
ldd:stackoverflow.com/a/68251162/50617。此外,在.so上运行ldd并不能告诉我们您的实际 问题是什么(“不工作”是什么意思?)。 -
@PeterCordes 是的,我想是的。而且我使用的是 CentOS 6.10 的集群,所以我必须适应它。
-
@EmployedRussian 不幸的是,
env LD_TRACE_LOADED_OBJECTS=1 xxx/intel/oneapi/compiler/2021.2.0/linux/lib/icx-lto.so的结果是Segmentation fault (core dumped),所以patchelf损坏了这个.so?附言“不工作”意味着问题仍然存在。 -
你没有有继续使用每年都越来越过时的旧 CentOS 安装。即使是维护/安全更新,它也已经过了 EOL,并且自去年 11 月 (wiki.centos.org/About/Product) 以来就已经过了,所以现在是真的开始考虑退役集群或升级到新版本的时候了东西或新发行版。如果您想花更多时间在旧发行版上使用新编译器,这取决于您,但即使是 CentOS 8 也是 2015 年。