LoginSignup
4
1

More than 5 years have passed since last update.

RStanのインストール時に C++14 standard requested but CXX14 is not defined と怒られた時の対処

Posted at

はじめに

友人がRStanの環境作りにはまり、それを解決する日本語の記事が見当たらなかったのでここに残しておきます。

環境

OS:Windows8
R:3.5.1
RStdio:1.1
Rtools:3.4 (g++:4.9.3)
RStan:2.17.3

インストール手順

基本的には以下のURLに従って進めます。
RStan Getting Started (Japanese)
しかし、RStanのインストールまで済ませてモデルのフィッティングを行う以下のコードを実行すると

console
fit <- stan(file = '8schools.stan', data = schools_dat,
            iter = 1000, chains = 4)

次のエラーが出て終了しました。

Error in compileCode(f, code, language = language, verbose = verbose) :
Compilation ERROR, function(s)/method(s) not created! Error in .shlib_internal(commandArgs(TRUE)) :
C++14 standard requested but CXX14 is not defined

原因

RToolsによってインストールされるg++のバージョンが4.9.3だったのですが、RからC++14を要求されているらしく、4.9.3のバージョンでは実行時にオプションをつけないとc++14を利用できないことが原因でした。

対処

結果的には、以下のURLに従って ~/.R/Makevars ファイルを生成することで無事にエラーを解消することができました。
Installing RStan on Windows
このページ内の以下のコードをコンソールで実行することによって解決できました。

console
dotR <- file.path(Sys.getenv("HOME"), ".R")
if (!file.exists(dotR)) 
  dir.create(dotR)
M <- file.path(dotR, "Makevars")
if (!file.exists(M)) 
  file.create(M)
cat("\nCXX14FLAGS=-O3 -Wno-unused-variable -Wno-unused-function",
    "CXX14 = g++ -std=c++1y",
    file = M, sep = "\n", append = TRUE)

このコードでは、~/.R/に以下のMakevarsファイルを生成します。

Makevars

CXX14FLAGS=-O3 -Wno-unused-variable -Wno-unused-function
CXX14 = g++ -std=c++1y

Rのコードの実行時にMakevarsにC++のコンパイルコマンドを読みにくるようです。
今回引っかかったのはC++14の利用だったので、最適化オプションであるCXXFLAGSは無くてもいいかもしれません(まああったほうがいいとは思います)。

もう一つ引っかかったこと

実は上のコンソールコマンドを実行する時にSys.getenv("HOME")でホームディレクトリが正しく取得できなかったのですが、これはユーザー名を日本語にしていたためパスに日本語が含まれていたことが原因でした。変えるのにレジストリいじる必要があってとてもめんどくさかったのでwindowsは悪(過激派)(ごめんなさい)

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1