Hatena::ブログ(Diary)

arupaka-_-arupakaの日記

2018-11-05

Rstan を変な環境にインストール

その1:processxで詰まる。

(1)ソースをもってくる。

(2)ソースを展開して、一つ一つ下のようにビルド

(3)ソースを圧縮、Rに読ませる。install.packages("processx.tar",repos=NULL,type="source")


他は、processx-vector.c はg++に変えるとかで対処できる。

Rstanインストール時の

In file included from processx.h(34),

from create-time.c(4):

unix/processx-unix.h(29): error: identifier "siginfo_t" is undefined

void processx__sigchld_callback(int sig, siginfo_t *info, void *ctx);

^

compilation aborted for create-time.c (code 2)

とか、

In file included from processx.h:34:0,

from create-time.c:4:

unix/processx-unix.h:29:42: error: unknown type name ‘siginfo_t’

void processx__sigchld_callback(int sig, siginfo_t *info, void *ctx);

のエラーは、

gcc -std=gnu99 -I"/ap/r/3.5.1/lib64/R/include" -DNDEBUG -I/usr/local/include -D_POSIX_C_SOURCE=199309L -fpic -g -O2 -std=c99 -c create-time.c -o create-time.o

を加える必要あり。

-D_POSIX_C_SOURCE=199309L

https://github.com/geommer/yabar/issues/18

その2:rstanで詰まる

Error in .shlib_internal(args) :

C++14 standard requested but CXX14 is not defined

https://qiita.com/kouki111x1/items/0ae9ef4fff617a8c0f55

ホームの下に、.Rに以下のRmarkvarsように作成して対処

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 -fPIC",

"CXX14 = g++ -std=c++1y",

file = M, sep = "\n", append = TRUE)

途中で -fPICをいれろとあったので、追加

CXX14がはいってないので、下のバージョンで

2013-10-22

cygwinからWindows64bit上で動くgslライブラリを作る。 mingwとcygwinの連携

(1)まず、gslのソースをもってくる

http://ftp.jaist.ac.jp/pub/GNU/gsl/

(2)次にコンパイル

./configure --host=x86_64-w64-mingw32 --prefix=/cygdrive/c/gsl CC=x86_64-w64-mingw32-gcc.exe CXX=i686-pc-mingw32-g++.exe

make

make install

configure の意味は

configure --help

を参考に。

コンパイラCC=x86_64-w64-mingw32-gcc.exe をしておくこと(mingw64bitのコンパイラ)、

環境を x86_64-w64-mingw32 (mingw環境)

としておくことがポイント。

mingwがない場合はそれっぽいものをsetup.exeから落としてくることができる。

参考サイト

mingw な ruby2.0 を cygwin 上でビルドする

http://qiita.com/hidachinoiro/items/19d2083ecc1bb72e3ccd

http://www.bookshelf.jp/texi/autoconf-ja/autoconf-ja_13.html

configure host bild の違い

http://d.hatena.ne.jp/maminus/20100129/1264781242

(3)PATHの設定。Windowsの(システム)パスにc:\gsl\bin を加えておく。

   コントロールパネル->システム環境設定->環境変数

注意:WindowsにはユーザーPATHとシステムPATHがあるので注意が必要。

おそらくこれでOK.

(4)テスト

#include <stdio.h>
#include <gsl/gsl_rng.h>
#include <gsl/gsl_randist.h>

void main(){
 const gsl_rng_type *T;
 int i;
 gsl_rng *r;
 double sigma=1;
 double mean=0;
 int number=100;
 double v;
 //gsl_rng_setup();
 T = gsl_rng_default;
 r = gsl_rng_alloc(T);
 gsl_rng_set(r,2);
 for(i=0;i<number;i++){
 v=gsl_ran_gaussian(r,1.0);
 printf("%lf\n",v);
}

}

コンパイル (cygwin上)

x86_64-w64-mingw32-gcc gsl_test.c -I/cygdrive/c/gsl/include -L/cygdrive/c/gsl/lib -lgsl -o a2.out

実行 (cygwin上)

./a2.out

結果

  • 1.303106

0.641980

  • 0.652074
  • 1.767485
  • 0.917929

0.650857

  • 0.909848
  • 0.140926

0.780644

1.158559