RからGSL(WinXP用)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
// ジェットラグ 2006/09/
// GSLをCygwinでmakeして、はまりまくりました。同じ轍を踏...
// ActivePearlが必要であることの追記。 ジェットラグ 200...
// Rの組み込み関数によるベッセル関数の結果を追加。 ジェ...
// 「Rから他言語利用」のページをリンク。 ジェットラグ 2...
// R 2.4.0に関する注記を追加。 ジェットラグ 2006/12/01
// R 2.4.0の仕様変更に併せて、Makevar.winファイルの記述...
// R 2.4.1で"PKG_LIBS="が使えるようになったこと、細かな...
SIZE(30){RからGSL(WinXP用)}
Windows XPでCプログラムからdllを作成するときに、Cプログラ...
[[GSL(GNU Scientific Library):http://www.gnu.org/software...
が提供する関数を使えるようにする。ちなみに、[[Cygwin:http...
は使わず、[[MinGW:http://www.mingw.org/]]と[[MSYS:http://...
--RからC言語を利用する際の一般的な手順は、[[Rから他言語利...
--少なくとも私の環境(R 2.3.1および2.4.0、日本語WinXP SP2...
--内容の誤りや別の方法、成功した、など、適宜修正・報告し...
-R のパッケージに gsl という GSL ライブラリーへの wrapper...
-パッケージgslのマニュアルを確認してみました。このパッケ...
-ついでに好奇心からですが教えて下さい。GSL ライブラリーを...
-「格好良さそうだから」という理由は別にして、GSLを使う最...
-以下の記事によると Meshach は行列演算がかなり早いらしい...
-この記事によれば、Meschachはかなり早いですね。行列演算に...
- R2.10.1で試しました。Makevars.winを"PKG_LIBS = -L/usr/l...
#comment
* 下準備 [#g6e369d1]
** MinGW、MSYSおよびActive Perlのインストール [#ib644ab0]
MinGWとMSYSはWindows用バイナリが用意されているので、それ...
ダウンロードはhttp://www.mingw.org/download.shtmlから、
MinGWは Priveous -> MinGW -> bin -> MinGW-3.1.0-1.exe,
MSYSは Current -> MSYS -> bin -> MSYS-1.0.10.exe,
をダウンロード。ダブルクリックして、デフォルトのままイン...
-MinGW-5.0.3.exeを使うと、途中でエラーが出て正常にインス...
Active Perlは、http://www.activestate.com/Products/Activ...
Free Download -> Continue
とたどって、適切なバージョン(私の環境ではver. 5.8.8.819, ...
をダウンロードし、c:/Perlへインストールます。最後にパスを...
**環境変数PATHの修正 [#l42de548]
環境変数PATHの''先頭''に次の一行
c:/MSYS/1.0/bin;c:/MinGW/bin;
(Perlのインストールでパスを追加していない場合は、c:/MSY...
を追加する。必ず''先頭''に追加してください。R_HOME/binへ...
* GSLのインストール [#t6b39e36]
** GSLソースコードの入手 [#x2928321]
http://ftp.gnu.org/gnu/gsl/から、最新のもの(2006.9.20現...
(例えばc:/temp)などに保存する。
** ソースコードの伸張とmake、インストール [#k42bf69e]
gsl-1.8.tar.gzをc:/tempに保存したとして、
MSYSを起動し、プロンプト($)で以下のように入力する。
$ cd c:/temp
$ tar zxvf gsl-1.8.tar.gz -C /c
c:/にgsl-1.8フォルダができる。MSYSで
カレントディレクトリをc:/gsl-1.8に変更し、configureをする。
$ cd c:/gsl-1.8
$ ./configure
''自動的''に進行するので、しばし待つ。再びプロンプトが現...
$ make
をすると、再び自動的に進行するので、これまたしばし待つ(1...
$ make install
でインストールされる。最後に
$ make clean
をすると余計なファイルを消してくれる。
-GSLのインストールはこれでお終いです。MSYSはこれ以降使わ...
* Makevars.winファイルの作成 [#w5ad8b2c]
作業ディレクトリ(コンパイルしようとするxxx.cがあるフォル...
EXTRA_LIBS = -L/usr/local/lib -lgsl -lgslcblas
PKG_CPPFLAGS = -I/usr/local/include
-EXTRA_LIBSはlibgsl.aとlibgslcblas.aのありかを指定する(デ...
-PKG_CPPFLAGSは、xxx.cファイルで#includeしたgsl_*.hのあり...
-Makevars.winファイルの役割は"Writing R Extensions"や
"R Installation and Administration"を参照のこと。
-R 2.4.0では、"PKG_LIBS="が正常に読み込まれなくなりました...
-R 2.4.1では、"PKG_LIBS="が使えるように再度変更されました。
これで準備は完了。
* 例:ベッセル関数 [#d7392af1]
mybess.cを、例えばc:/testに作成する。
こんな感じ。
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
void mybessel(double *x, double *y)
{
*y = gsl_sf_bessel_J0 (*x);
}
mybess.cと同じディレクトリにMakevar.winがあることを確認し...
C:\test>R CMD SHLIB mybess.c
以下の''ような''メッセージが表示されて、dllファイルが作成...
making mybess.d from mybess.c
gcc -I/usr/local/include -Ic:/R-2.3.1/include -Wall -O2...
gcc -shared -s -o mybess.dll mybess.def mybess.o -Lc:...
なおR Ver. 2.4.0では、最初に"/bin/sh.exe: latex: command ...
RからCへ変数を引き渡すラッパーを作成する。
bess = function(x) {
.C("mybessel", as.double(x), result = double(1))$res...
}
次にRを起動して、動作を確認する。
> setwd("c:/test")
> dyn.load("mybess.dll")
> bess = function(x) {
.C("mybessel", as.double(x), result = double(1))$res...
}
> bess(5) # GSLのベッセル関数による計算結果
[1] -0.1775968
> besselJ(5,0) # Rの組み込み関数による計算結果
[1] -0.1775968
めでたしめでたし。
終了行:
// ジェットラグ 2006/09/
// GSLをCygwinでmakeして、はまりまくりました。同じ轍を踏...
// ActivePearlが必要であることの追記。 ジェットラグ 200...
// Rの組み込み関数によるベッセル関数の結果を追加。 ジェ...
// 「Rから他言語利用」のページをリンク。 ジェットラグ 2...
// R 2.4.0に関する注記を追加。 ジェットラグ 2006/12/01
// R 2.4.0の仕様変更に併せて、Makevar.winファイルの記述...
// R 2.4.1で"PKG_LIBS="が使えるようになったこと、細かな...
SIZE(30){RからGSL(WinXP用)}
Windows XPでCプログラムからdllを作成するときに、Cプログラ...
[[GSL(GNU Scientific Library):http://www.gnu.org/software...
が提供する関数を使えるようにする。ちなみに、[[Cygwin:http...
は使わず、[[MinGW:http://www.mingw.org/]]と[[MSYS:http://...
--RからC言語を利用する際の一般的な手順は、[[Rから他言語利...
--少なくとも私の環境(R 2.3.1および2.4.0、日本語WinXP SP2...
--内容の誤りや別の方法、成功した、など、適宜修正・報告し...
-R のパッケージに gsl という GSL ライブラリーへの wrapper...
-パッケージgslのマニュアルを確認してみました。このパッケ...
-ついでに好奇心からですが教えて下さい。GSL ライブラリーを...
-「格好良さそうだから」という理由は別にして、GSLを使う最...
-以下の記事によると Meshach は行列演算がかなり早いらしい...
-この記事によれば、Meschachはかなり早いですね。行列演算に...
- R2.10.1で試しました。Makevars.winを"PKG_LIBS = -L/usr/l...
#comment
* 下準備 [#g6e369d1]
** MinGW、MSYSおよびActive Perlのインストール [#ib644ab0]
MinGWとMSYSはWindows用バイナリが用意されているので、それ...
ダウンロードはhttp://www.mingw.org/download.shtmlから、
MinGWは Priveous -> MinGW -> bin -> MinGW-3.1.0-1.exe,
MSYSは Current -> MSYS -> bin -> MSYS-1.0.10.exe,
をダウンロード。ダブルクリックして、デフォルトのままイン...
-MinGW-5.0.3.exeを使うと、途中でエラーが出て正常にインス...
Active Perlは、http://www.activestate.com/Products/Activ...
Free Download -> Continue
とたどって、適切なバージョン(私の環境ではver. 5.8.8.819, ...
をダウンロードし、c:/Perlへインストールます。最後にパスを...
**環境変数PATHの修正 [#l42de548]
環境変数PATHの''先頭''に次の一行
c:/MSYS/1.0/bin;c:/MinGW/bin;
(Perlのインストールでパスを追加していない場合は、c:/MSY...
を追加する。必ず''先頭''に追加してください。R_HOME/binへ...
* GSLのインストール [#t6b39e36]
** GSLソースコードの入手 [#x2928321]
http://ftp.gnu.org/gnu/gsl/から、最新のもの(2006.9.20現...
(例えばc:/temp)などに保存する。
** ソースコードの伸張とmake、インストール [#k42bf69e]
gsl-1.8.tar.gzをc:/tempに保存したとして、
MSYSを起動し、プロンプト($)で以下のように入力する。
$ cd c:/temp
$ tar zxvf gsl-1.8.tar.gz -C /c
c:/にgsl-1.8フォルダができる。MSYSで
カレントディレクトリをc:/gsl-1.8に変更し、configureをする。
$ cd c:/gsl-1.8
$ ./configure
''自動的''に進行するので、しばし待つ。再びプロンプトが現...
$ make
をすると、再び自動的に進行するので、これまたしばし待つ(1...
$ make install
でインストールされる。最後に
$ make clean
をすると余計なファイルを消してくれる。
-GSLのインストールはこれでお終いです。MSYSはこれ以降使わ...
* Makevars.winファイルの作成 [#w5ad8b2c]
作業ディレクトリ(コンパイルしようとするxxx.cがあるフォル...
EXTRA_LIBS = -L/usr/local/lib -lgsl -lgslcblas
PKG_CPPFLAGS = -I/usr/local/include
-EXTRA_LIBSはlibgsl.aとlibgslcblas.aのありかを指定する(デ...
-PKG_CPPFLAGSは、xxx.cファイルで#includeしたgsl_*.hのあり...
-Makevars.winファイルの役割は"Writing R Extensions"や
"R Installation and Administration"を参照のこと。
-R 2.4.0では、"PKG_LIBS="が正常に読み込まれなくなりました...
-R 2.4.1では、"PKG_LIBS="が使えるように再度変更されました。
これで準備は完了。
* 例:ベッセル関数 [#d7392af1]
mybess.cを、例えばc:/testに作成する。
こんな感じ。
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
void mybessel(double *x, double *y)
{
*y = gsl_sf_bessel_J0 (*x);
}
mybess.cと同じディレクトリにMakevar.winがあることを確認し...
C:\test>R CMD SHLIB mybess.c
以下の''ような''メッセージが表示されて、dllファイルが作成...
making mybess.d from mybess.c
gcc -I/usr/local/include -Ic:/R-2.3.1/include -Wall -O2...
gcc -shared -s -o mybess.dll mybess.def mybess.o -Lc:...
なおR Ver. 2.4.0では、最初に"/bin/sh.exe: latex: command ...
RからCへ変数を引き渡すラッパーを作成する。
bess = function(x) {
.C("mybessel", as.double(x), result = double(1))$res...
}
次にRを起動して、動作を確認する。
> setwd("c:/test")
> dyn.load("mybess.dll")
> bess = function(x) {
.C("mybessel", as.double(x), result = double(1))$res...
}
> bess(5) # GSLのベッセル関数による計算結果
[1] -0.1775968
> besselJ(5,0) # Rの組み込み関数による計算結果
[1] -0.1775968
めでたしめでたし。
ページ名: