web-dev-qa-db-ja.com

R v3.4.0-2がArchでlibgfortran.so.3を見つけることができません

私は1か月休暇中だったので、これが起こった正確な時点を言うことはできませんが、公式の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 Archで?もしそうなら、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 <[email protected]>
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は正しくコンパイルおよび実行されるので、次のバージョンのバンプで問題が解決することを期待しています。

12
Chris C

実際、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

8
Vladimir F

私はlibgfortran.so.3を必要とするpyferretという名前のソフトウェアで作業しています。パッケージマネージャーがデフォルトでgfortran 7(より高いバージョン)をインストールするFedora 27を実行しています。これにより、共有オブジェクトlibgfortran.so.4/usr/lib64に作成されます。 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

これは上記のエラーなしで機能しました。

2
srinivasu u

この問題は、GCCのアップデート後に再ビルドされていないAURパッケージに起因している可能性があります。私の個人的なケースでは、おそらくパッケージopenblas-lapack混乱していた( https://bbs.archlinux.org/viewtopic.php?id=2369 を参照)。 そのため、以前のバージョンのGCCをインストールする必要がない場合があります。

私がしたことは:

  1. すべてのAURパッケージを更新(yaourt -Syua
  2. 次にR(pacman -S r

そしてそれは再び働いた。

1
Ludovic Duvaux

Rには、GCC Fortranに依存する多くのパッケージがあります。それらのいくつかは、新しいGCCに対してコンパイルするように更新されていませんが、これらに依存するいくつかのパッケージは更新されていますが、deldirと堅牢なベースは2つの例です。

警告を確認し、ロードに失敗したパッケージをインストールしてから、アップグレードを実行してください。

1
Joe

Arch-Linuxについてははっきりとは言えませんが、Ubuntuのgfortranに含まれるリポジトリの標準セットでは、aptライブラリの複数のバージョンを利用できます。

18.04(LTS)に変更するとき、ライブラリのデフォルトバージョン4と一緒に前のバージョンをインストールする必要がありました。

私にとって、次のコマンドはこの問題を解決しました:Sudo apt-get install libgfortran3

Rですべてのパッケージを再ビルドしても、私の場合のようにパッケージがしばらくメンテナンスされていないと、問題が解決しない場合があります。

0
Will C

Libgfortranが互換性のないsonameバンプを受信するたびにこの問題が定期的に発生します。これは、Rの世界では、blas/lapackがAURの代替実装に置き換えられることが非常に一般的であるためです。

ここで注意すべき重要な点は、エラーのあるのは実際にはRではないということです

小さな免責事項:ここでは、公式のArch Linuxバグラングラーの帽子について話しています。これが、この種の問題を追跡する方法です。 (これは、バグレポートを無効としてクローズする必要があるかどうかを確認する方法でもあります。)

私の便利なArch Linuxバグラングラーユーティリティツール 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

そして、これがテスト用のchrootであり、何が起きても構わないのでlibgfortranライブラリを削除すると、次のようになります。

/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

これは、libgfortran.soの検索でエラーが発生しているのがlibblas.soであることを明確に示しています。そこから、壊れたlibblas.soを所有しているpacmanパッケージを確認できます。本当に公式のリポジトリパッケージである場合は、バグを報告して修正してください(修正されていない場合)。これで、自分で再コンパイルするAURパッケージがわかりました。

0
eschwartz