您好,我正在尝试使用英特尔mpiifort
来编译我的程序。制作过程中发生一个错误:
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.
我在单个主机上阅读了多个 glibc 库,并且我同时遵守了 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
解决
这个错误:
ld: xxx/intel/oneapi/compiler/2021.2.0/linux/bin/intel64/.../icx-lto.so: error loading plugin: /lib64/libc.so.6: version `GLIBC_2.14' not found.
似乎来自ld
.
使用
ifort
和icc
时出现相同的错误
看起来ifort
和icc
都在使用链接器插件来执行LTO(链接时间优化)。
您需要patchelf
实际失败的二进制文件(在这种情况下ld
),而不是仅调用ld
的二进制文件(即ifort
和icc
单独调用)。
通常,您可以告诉编译器打印有关其调用的二进制文件的更多信息,例如icc -v <rest of command>
.
我希望.../intel/oneapi/compiler/2021.2.0/linux/...
下有ld
(或可能ld.lld
),你需要patchelf
该二进制文件。