Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

友人が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は悪(過激派)(ごめんなさい)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした