web-dev-qa-db-ja.com

Rパッケージのビルドとエラー「ld:-lgfortranが見つかりません」

パッケージlarsをインストールしようとしています。 Ubuntu 11.04 Natty 64ビット。建物から私は得る:

* installing *source* package âlarsâ ...
** libs
gfortran   -fpic  -O3 -pipe  -g -c delcol.f -o delcol.o
gcc -shared -o lars.so delcol.o -lgfortran -lm -L/usr/lib64/R/lib -lR
/usr/bin/ld: cannot find -lgfortran
collect2: ld returned 1 exit status
make: *** [lars.so] Error 1
ERROR: compilation failed for package âlarsâ

gfortranがインストールされており、gfortran --versionを実行すると、

gfortran --version GNU Fortran(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2

Sudo ldconfig -vはエラーを示します

/sbin/ldconfig.real:/usr/lib/libgfortran.soをstatできません:そのようなファイルまたはディレクトリはありません

私はすでにgfortranを削除して再インストールしました。これを修正するには何が必要ですか?

38
Andrew Redd

Debian/Ubuntuファミリーの場合、通常は

 $ Sudo apt-get install r-base-dev

コンパイルに通常必要なすべてのパッケージを取り込むためです。また、自動化されたパッケージビルダーはこれに依存しているため、このアプローチは常にテストされています(さらに、パッケージごとのBuild-Dependsも追加されています)。 gfortranパッケージもここにリストされています。多分あなたは以前のインストールから壊れたリンクを持っているので私もdpkg --purge gfortran; apt-get install gfortran。とは言っても、何十ものRパッケージ(およびR自体)がFortranを使用しているため、ここでは魔法はありません。

28

Ubuntu 12.10 64ビットにCRANパッケージVGAMをインストールしようとすると、同じ問題が発生しました。私はすでにr-base-devをインストールしていましたが、Dirk Eddelbuettelの回答に対するAndrew Reddの2番目のコメントが役に立ちました。

具体的には、2つのエラーが発生しました。

/usr/bin/ld: cannot find -lgfortran
/usr/bin/ld: cannot find -lquadmath

次の行で修正されました:

Sudo ln -s /usr/lib/x86_64-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so
Sudo ln -s /usr/lib/x86_64-linux-gnu/libquadmath.so.0 /usr/lib/libquadmath.so

元の投稿から問題を処理するために必要なのは最初の行だけであることに注意してください。 lquadmathでの追加エラーの2行目が修正されました。

57
kevin

他の提案で問題が解決したようですが、質問にも当てはまりますが、私の場合は解決策が異なりました。私の問題は、私のgccおよびg ++バージョンが私のgfortranバージョンと異なることでした。以下を使用して、それらがすべて同じになるように切り替えました。

  1. 使用しているgcc、g ++、およびgfortranのバージョンを確認します。

    g++ --version
    gcc --version
    gfortran --version
    
  2. それらがすべて同じになるように一致させます。

    Sudo update-alternatives --config g++
    Sudo update-alternatives --config gcc
    Sudo update-alternatives --config gfortran
    

私の場合、gfortranのバージョンは1つしかなかったので、g ++とgccのバージョンを変更して、gfortranのバージョンと一致させました。

11
dlpolanco

Rパッケージminqaをubuntu 12.04、R3.1.0。、x86 32ビットにインストールする同じ問題(実際には、キャレットパッケージインストールの一部でした)。

によって解決

Sudo ln -s /usr/lib/i386-linux-gnu/libgfortran.so.3 /usr/lib/libgfortran.so

すべての依存関係のため、r-base-devの再インストールは機能せず、gfortranを再インストールしようとしませんでした。

システム/バージョンに応じて、

ls -l /usr/lib/libgfortran.so

リンクが存在する/正しいことを確認します。

8
jeanM

Centosを使用していますが、r-base-devを取得できません。私はgfortranもインストールしており、そのバージョンはgccおよびg ++のバージョンと一致しています。それでも機能しませんでした。ただし、~/.R/Makevarsを作成してこの問題を解決しました。

cd ~
mkdir .R
touch Makevars

私はgfortranをインストールしたディレクトリを見つけました(どうやら問題はRがそれを見つけられないことです)

which gfortran

私はusr/bin/gfortranにgfortranをインストールしたと言っています。次に、.R/Makevarsにフラグを追加して、Rに使用するように指示します。

F77 = /usr/bin/gfortran
FC = $F77
FLIBS = -L/usr/bin/gfortran

Makevarsファイルは次の方法で編集できます。

vi .R/Makevars

これで、テキストファイルを編集できるviプログラムに入りました。編集するにはiと入力します。ターミナルウィンドウの下部にINSERTが表示されます。次に、私が上に置いたものを入力できます。変更を保存してviを終了するには、escキーを押して、:wqと入力します。

MacOSではFLIBS行が大きく異なるため、FLIBS行を正しく配置したかどうかは完全にはわかりません。 MacOSでは、リンクするライブラリがあるgfortranの下にディレクトリがありますが、gfortranはLinuxのディレクトリではないようです。少なくともこれでうまくいき、/usr/bin/ld: cannot find -lquadmathの問題も解決したので、gfortranを必要とするRパッケージをスムーズにインストールしました。

4
Lambda Moses

ライブラリをインストールする必要はありませんでした。うまくいったことを投稿すると、多分誰かに役立つでしょう。

~/.R/Makevars使用するように定義CC=gcc-8。私のマシンのデフォルトのgccは7.4.0ですが、gcc-8をインストールしました。同時に、gfortran 8がなく、7.4.0しかありませんでした。 Makevarsの行をコメント化すると、コンパイルはデフォルトのgcc-7を使用するようにフォールバックし、そのときはgfortran-7 libを正常に使用していました。

2
jangorecki

私の場合(Amazon Linux EC2 AMI)のように、これを今後の参照用にここに残しておくと、問題はシンボリックリンクの名前に関係し、その場所には関係ありませんでした。

Sudo ln -s /usr/lib64/libgfortran.so.3 /usr/lib64/libgfortran.so
Sudo ln -s /usr/lib64/libquadmath.so.0 /usr/lib64/libquadmath.so
2
João Nogueira

同じエラー on Mac でこのページにアクセスした人は、以下を試してください:

Homebrew をインストールして実行します。

brew install gcc

次に、ファイルを作成します~/.R/Makevars内容(これはgccバージョン9.1.0に対応していることに注意してください):

VER=-9
CC=gcc$(VER)
CXX=g++$(VER)
CFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
CXXFLAGS=-mtune=native -g -O2 -Wall -pedantic -Wconversion
FLIBS=-L/usr/local/Cellar/gcc/9.1.0/lib/gcc/9

  • R v3.6.0
  • gcc v9.1.0
  • Homebrew v2.1.6
  • macOS v10.14.5
1
Megatron

将来の失われた魂のために、コンパイラのバージョンがすべて一致することを確認するのにも役立ちます(- https://askubuntu.com/questions/276892/cannot-find-lgfortran ごとに)。私の場合、gccとgfortranはどちらも4.8.4でしたが、g ++は4.6でした。

0
Neil

Gcc44を使用している場合は、次のものが必要です。

yum install gcc44-gfortran
0
user4020650