MacOS X 上の R で caret
パッケージをインストールしていたら OpenMP 関連のヘッダファイルが無いとためにパッケージのコンパイルに失敗しエラーとなった.対処法を記しておく.
caret
パッケージのインストール中に以下のエラーが発生.OpenMP ライブラリ用の omp.h
ヘッダファイルが見つからないというエラーだ.Mac のデフォルトコンパイラ clang
の version 8.0.0 は OpenMP をサポートしていなかった.
/usr/bin/clang++ -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Users/shito/Library/R/3.5/library/Rcpp/include" -I/opt/local/include -fPIC -pipe -Os -stdlib=libc++ -arch x86_64 -c auc_.cpp -o auc_.o
auc_.cpp:2:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
make: *** [auc_.o] Error 1
GCC 5 以降は OpenMP をサポートしている.パッケージ管理システムに MacPorts を使用しているなら,以下でインストール済みの GCC を確認できる.
$ port installed | grep gcc
私の環境では gcc6
がインストールされていたので,バイナリファイルの在りかを以下でチェック.
$ port contents gcc6 | grep /bin/
/opt/local/bin/c++-mp-6
/opt/local/bin/cpp-mp-6
/opt/local/bin/g++-mp-6
/opt/local/bin/gcc-ar-mp-6
/opt/local/bin/gcc-mp-6
/opt/local/bin/gcc-nm-mp-6
/opt/local/bin/gcc-ranlib-mp-6
/opt/local/bin/gcov-dump-mp-6
/opt/local/bin/gcov-mp-6
/opt/local/bin/gcov-tool-mp-6
/opt/local/bin/gfortran-mp-6
/opt/local/bin/x86_64-apple-darwin15-c++-mp-6
/opt/local/bin/x86_64-apple-darwin15-g++-mp-6
/opt/local/bin/x86_64-apple-darwin15-gcc-6.4.0
/opt/local/bin/x86_64-apple-darwin15-gcc-ar-mp-6
/opt/local/bin/x86_64-apple-darwin15-gcc-mp-6
/opt/local/bin/x86_64-apple-darwin15-gcc-nm-mp-6
/opt/local/bin/x86_64-apple-darwin15-gcc-ranlib-mp-6
/opt/local/bin/x86_64-apple-darwin15-gfortran-mp-6
R のパッケージをインストールする際に使用するコンパイラに gcc6 をする.コンパイラの指定は,~/.R/Makevars
ファイル内で行う(マニュアル参照).
# C++コンパイラに g++-mp-6 を指定
CXX=/opt/local/bin/g++-mp-6
# -std オプションを取り除く
CXXFLAGS= -DNDEBUG -fPIC -pipe -Os -arch x86_64
CXXFLAGS
はコンパイラオプションを上書きする.caret
パッケージのインストールではデフォルトで clang
が -stdlib=libc++
オプション付きで呼び出されていたが,gcc
には無いオプションなので,このオプション以外を取り出して CXXFLAGS
に設定した.stdlib=libc++
オプションのエラー部分は以下のとおり.
/opt/local/bin/g++-mp-6 -I"/opt/local/Library/Frameworks/R.framework/Resources/include" -DNDEBUG -I"/Users/shito/Library/R/3.5/library/Rcpp/include" -I/opt/local/include -fPIC -pipe -Os -stdlib=libc++ -arch x86_64 -c RcppExports.cpp -o RcppExports.o
g++-mp-6: error: unrecognized command line option '-stdlib=libc++'
make: *** [RcppExports.o] Error 1
以上の設定の下,R コンソールで install.package()
を再度実行し,インストールに成功したら ~/.R/Makevars
ファイルの記述を削除して元に戻しておくか,行頭に #
を挿入しコメントアウトしておくと良い.