为什么安装的 libquadmath0 是 32 位精灵?

为什么安装的 libquadmath0 是 32 位精灵?

我正在尝试使用 gfortran 编译 Fortran 程序。但是,编译后,我得到以下输出:

rpower@kaladin:~/Downloads/testfort$ gfortran program.f90 -o program
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/11/libquadmath.so when searching for -lquadmath

我以前没有遇到过此错误。编译调用生成一个可执行文件,当传递给它时,ldd将给出:

rpower@kaladin:~/Downloads/testfort$ ldd ./program
    linux-vdso.so.1 (0x00007ffc815e6000)
    libgfortran.so.5 => /lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007f621bb5f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f621b937000)
    libquadmath.so.0 => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f621b850000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f621b830000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f621be57000)

因此无法找到合适的库。但是,我发现我确实有这个库

rpower@kaladin:~/Downloads/testfort$ file /usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0 
/usr/lib/x86_64-linux-gnu/libquadmath.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, with debug_info, not stripped

但正如你所见,它是一个 32 位 ELF,这就是为什么当我尝试运行该程序时,我得到了

rpower@kaladin:~/Downloads/testfort$ ./program
./program: error while loading shared libraries: libquadmath.so.0: wrong ELF class: ELFCLASS32

我喜欢认为自己是一个相当称职的 Linux 用户,但我对此非常困惑。该libquadmath库仅通过标准安装即可卸载gfortran,我很困惑为什么它会是 32 位 ELF。任何指导都将不胜感激。我找不到安装 64 位版本的方法...

答案1

好吧,我很高兴这个问题已经解决了,但是感觉有点蠢。特伦斯解决问题。我重新安装了库

sudo apt install --reinstall libquadmath0

现在,我们成功编译并链接到现在的 64 位版本的库。我很困惑我一开始是如何得到那个 32 位的。

相关内容