我正在尝试使用 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 位的。