![](/img/trans.png)
[英]GraalVm Error: libgfortran.so.3 for running R code in Node (Ubuntu)
[英]R v3.4.0-2 unable to find libgfortran.so.3 on Arch
我刚刚度假一个月,所以我无法说出发生这种情况的确切点,但是官方Arch回购的R
现在无法启动,引用
/usr/lib64/R/bin/exec/R: error while loading shared libraries:
libgfortran.so.3: cannot open shared object file: No such file or directory
我认为也许一个符号链接被错误地放置或销毁,所以我查看了/ usr / lib来尝试找到它:
ls -halt /usr/lib/libgfortran.so.*
lrwxrwxrwx 1 root root 20 May 16 03:01 /usr/lib/libgfortran.so.4 -> libgfortran.so.4.0.0
-rwxr-xr-x 1 root root 7.1M May 16 03:01 /usr/lib/libgfortran.so.4.0.0
已libfortran.so.3
被取代的libgfortran.so.4
的门吗? 如果是这样,是否有任何可能的解决方法让R
运行旧版本?
pacman -Qi r
Name : r
Version : 3.4.0-2
Description : Language and environment for statistical computing and graphics
Architecture : x86_64
URL : http://www.r-project.org/
Licenses : GPL
Groups : None
Provides : None
Depends On : blas lapack bzip2 libpng libjpeg libtiff ncurses pcre readline zlib perl gcc-libs libxt libxmu pango xz desktop-file-utils zip unzip
Optional Deps : tk: tcl/tk interface [installed]
texlive-bin: latex sty files [installed]
Required By : None
Optional For : graphviz
Conflicts With : None
Replaces : None
Installed Size : 58.04 MiB
Packager : Evangelos Foutras <evangelos@foutrelis.com>
Build Date : Tue 25 Apr 2017 05:04:31 AM EDT
Install Date : Tue 20 Jun 2017 12:27:06 PM EDT
Install Reason : Explicitly installed
Install Script : No
Validated By : Signature
编辑:如果有其他人遇到这个, r-devel AUR正确编译并运行,所以希望在下一个版本颠簸时问题将得到解决。
实际上,gfortran 7将ligfortran版本颠覆到版本4.请参阅http://gcc.1065356.n8.nabble.com/patch-fortran-PR77828-Linking-gfortran-7-compiled-program-with-libgfortran-of-5 -x-allowed-but-crashes-td1311625.html它不向后兼容,一些API已经改变。
如果您安装旧版本的gfortran,您将获得libgfortran.so.3。 在您的系统中拥有多个版本是完全没问题的。 也许有一种方法如何为版本4重建R,
但它可能会更多的工作
。 请参阅其他答案如何重建软件https://stackoverflow.com/a/50744705/721644
我在一个名为pyferret的软件上工作,需要libgfortran.so.3
。 我正在运行fedora 27,其默认情况下,包管理器安装gfortran 7(更高版本)。 这会在/usr/lib64
生成共享对象libgfortran.so.4
。 另一个运行Ubuntu 16.04.3的Linux系统有libgfortran.so.3
。 我将它复制到〜/ pkgs / libs中的系统并运行应用程序
export LD_PRELOAD=/home/vasu/pkgs/libs/libgfortran.so.3:/home/vasu/pkgs/libs/libopenblas.so.0;pyferret
这没有上述错误。
R中有许多软件包依赖于GCC Fortran。 其中一些尚未更新以针对新GCC进行编译,而某些包更新依赖于这些,deldir和robustbase是两个示例。
检查警告并安装任何无法加载的软件包然后执行升级。
问题可能来自一些在GCC更新后尚未重建的AUR包。 在我个人的情况下,可能是openblas-lapack
了(参见https://bbs.archlinux.org/viewtopic.php?id=236900 )。 因此可能不需要安装任何以前版本的GCC。
我做的是:
yaourt -Syua
) pacman -S r
) 它再次起作用。
我不能肯定地说Arch-Linux,但是在Ubuntu上的apt
包含的标准repos集上有多个版本的gfortran
库。
当更改为18.04(LTS)时,我必须安装以前的版本以及库的默认版本4。
对我来说,以下命令解决了这个问题: sudo apt-get install libgfortran3
如果您的软件包暂时没有维护,重建R中的所有软件包可能无法解决问题,就像我的情况一样。
每当libgfortran收到不兼容的soname bump时,会定期发生此问题,主要是因为在R世界中,blas / lapack被AUR中的替代实现替换是很常见的。
这里要注意的重要一点是它实际上不是R有错误 。
这里的轻微免责声明:我在这里与我的官方Arch Linux bugwrangler帽子说话,这就是我试图追踪这类问题的方法。 (这也是我如何检查错误报告是否应该被关闭为无效的。)
使用我方便的Arch Linux bugwrangler实用工具pkg-list-linked-libraries (它完成了它在锡上的说法):
$ pkg-list-linked-libraries r libgfortran.so
==> checking linked libraries for r-3.5.1-2-x86_64.pkg.tar.xz ...
==> ERROR: No file in r-3.5.1-2-x86_64.pkg.tar.xz is linked to libgfortran.so
所以,如果它不是来自R
本身,它来自哪里? 使用工具lddtree
(来自pax-utils)不仅可以显示可执行文件所需的库(如ldd
),还可以以树格式显示为什么需要它们:
$ lddtree /usr/lib/R/bin/exec/R
/usr/lib/R/bin/exec/R (interpreter => /lib64/ld-linux-x86-64.so.2)
libR.so => /usr/lib/R/lib/libR.so
libblas.so.3 => /usr/lib/libblas.so.3
libgfortran.so.5 => /usr/lib/libgfortran.so.5
libquadmath.so.0 => /usr/lib/libquadmath.so.0
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1
libm.so.6 => /usr/lib/libm.so.6
libreadline.so.7 => /usr/lib/libreadline.so.7
libncursesw.so.6 => /usr/lib/libncursesw.so.6
libpcre.so.1 => /usr/lib/libpcre.so.1
liblzma.so.5 => /usr/lib/liblzma.so.5
libbz2.so.1.0 => /usr/lib/libbz2.so.1.0
libz.so.1 => /usr/lib/libz.so.1
libtirpc.so.3 => /usr/lib/libtirpc.so.3
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2
libkrb5support.so.0 => /usr/lib/libkrb5support.so.0
libkeyutils.so.1 => /usr/lib/libkeyutils.so.1
libresolv.so.2 => /usr/lib/libresolv.so.2
libkrb5.so.3 => /usr/lib/libkrb5.so.3
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3
libcom_err.so.2 => /usr/lib/libcom_err.so.2
librt.so.1 => /usr/lib/librt.so.1
libdl.so.2 => /usr/lib/libdl.so.2
libicuuc.so.62 => /usr/lib/libicuuc.so.62
libicudata.so.62 => /usr/lib/libicudata.so.62
libstdc++.so.6 => /usr/lib/libstdc++.so.6
libicui18n.so.62 => /usr/lib/libicui18n.so.62
libgomp.so.1 => /usr/lib/libgomp.so.1
libpthread.so.0 => /usr/lib/libpthread.so.0
libc.so.6 => /usr/lib/libc.so.6
这里的相关位是开头:
/usr/lib/R/bin/exec/R (interpreter => /lib64/ld-linux-x86-64.so.2)
libR.so => /usr/lib/R/lib/libR.so
libblas.so.3 => /usr/lib/libblas.so.3
libgfortran.so.5 => /usr/lib/libgfortran.so.5
如果我删除了libgfortran库,因为这是一个测试chroot,我不在乎它发生了什么,我看到:
/usr/lib/R/bin/exec/R (interpreter => /lib64/ld-linux-x86-64.so.2)
libR.so => /usr/lib/R/lib/libR.so
libblas.so.3 => /usr/lib/libblas.so.3
libgfortran.so.5 => None
这清楚地表明libblas.so找到了libgfortran.so时出错了,从那里你可以检查一下pacman包拥有破坏的libblas.so - 如果它是真正的官方存储库包,那么你可以报告错误以修复它,如果没有,那么现在你知道自己重新编译哪个AUR包。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.