Rのこと。

記事は引っ越し作業中。2023年中までに引っ越しを完了させてブログは削除予定

ld: library not found for -lgfortranの対処法

はじめに

forecastパッケージをインストールした際にld: library not found for -lgfortranがでて困った際のワークアラウンド

sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.6

事象としてはこんなかんじ。

install.packages('forecast', dependencies = TRUE)

【略】
ld: warning: directory not found for option '-L/usr/local/gfortran/lib/gcc/x86_64-apple-darwin15/6.1.0'
ld: warning: directory not found for option '-L/usr/local/gfortran/lib'

ld: library not found for -lgfortran ←←←←コレ

clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [RcppArmadillo.so] Error 1
ERROR: compilation failed for package ‘RcppArmadillo’
* removing ‘/Library/Frameworks/R.framework/Versions/3.6/Resources/library/RcppArmadillo’
Warning in install.packages :
  installation of package ‘RcppArmadillo’ had non-zero exit status
ERROR: dependency ‘quadprog’ is not available for package ‘tseries’
* removing ‘/Library/Frameworks/R.framework/Versions/3.6/Resources/library/tseries’
Warning in install.packages :
  installation of package ‘tseries’ had non-zero exit status
ERROR: dependencies ‘fracdiff’, ‘lmtest’, ‘tseries’, ‘urca’, ‘RcppArmadillo’ are not available for package ‘forecast’
* removing ‘/Library/Frameworks/R.framework/Versions/3.6/Resources/library/forecast’
Warning in install.packages :
  installation of package ‘forecast’ had non-zero exit status

下記をターミナルで実行。

$ brew install gcc@4.9

# gccコンパイラなどのver.を4.9に揃える
ln -fs /usr/local/bin/gcc-4.9 /usr/local/bin/gcc
ln -fs /usr/local/bin/g++-4.9 /usr/local/bin/g++
ln -fs /usr/local/bin/gfortran-4.9 /usr/local/bin/gfortran

# lgfortranのシンボリックリンク設定
ln -fs /usr/local/lib/gcc/4.9/libgfortran.dylib /usr/local/lib/libgfortran.dylib
ln -fs /usr/local/lib/gcc/4.9/libgfortran.a /usr/local/lib/libgfortran.a
ln -fs /usr/local/lib/gcc/4.9/libgfortran.3.dylib /usr/local/lib/libgfortran.3.dylib
ln -fs /usr/local/lib/gcc/4.9/libgfortran.spec /usr/local/lib/libgfortran.spec

# ld: library not found for -lquadmathが出た場合
# ln -fs /usr/local/lib/gcc/4.9/libquadmath.0.dylib /usr/local/lib/libquadmath.0.dylib
# ln -fs /usr/local/lib/gcc/4.9/libquadmath.a /usr/local/lib/libquadmath.a
# ln -fs /usr/local/lib/gcc/4.9/libquadmath.dylib /usr/local/lib/libquadmath.dylib

install.packages('forecast', dependencies = TRUE)
library(forecast)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo