「MinGW のインストール」の Web ページの記述に従って,下記のソフトウェアのインストールが済んでいること.
環境変数 PATHが「C:\msys\1.0\bin;C:\MinGW\bin」を含むこと.
※ つまり, MSYS インストールディレクトリの下の bin と, MinGW インストールディレクトリの下の bin を含むように設定.
C:\R\R-2.8.1\share\perl\R の下にあるファイルについて
仮に次のような C プログラムを作り,mysum.c のような名前で保存. ファイル名は mysum.c,ディレクトリ名は C:\tmp として,以下の説明を続ける.
#include<stdio.h> #ifdef __cplusplus extern "C" void mysum(double *a, double *b, double *c); #endif void mysum(double *a, int *size, double *c) { FILE *in_file; char line[100]; int i; double sum; in_file = fopen("C:\\temp\\log.txt", "w+"); if( in_file == NULL ) { return; } // print out a and size for( i = 0; i < (*size); i++ ) { sprintf( line, "a[%d] = %f\n", i, a[i] ); fputs( line, in_file ); } sprintf( line, "size = %d\n", *size ); fputs( line, in_file ); sum = 0; for( i = 0; i < (*size); i++ ) { sum = sum + a[i]; } *c = sum; fclose(in_file); }
コンパイルするために,次の操作を行う.
cd C:\tmp C:\R\R-2.8.1\bin\Rcmd.exe SHLIB mysum.c
setwd( "C:/tmp" ) dyn.load("mysum.dll") mysum <- function(a,b){ .C("mysum", arg1=as.vector(a), arg2=as.integer(b), arg3=double(1) ) }
今定義した R の関数を介して,C の関数 mysum() を呼びだしてみる.
mysum( c(1,2,3,4), 4 )