void conv2(double *a, int *na, double *b, int *nb, double *ab)<br />
{<br />
int i, j, nab = *na + *nb - 1;<br />
for(i = 0; i < nab; i++)<br />
ab[i] = 0.0;<br />
for(i = 0; i < *na; i++)<br />
for(j = 0; j < *nb; j++)<br />
ab[i + j] += a[i] * b[j];<br />
}<br />
<br />
//end of file conv2.c
我试了三种方式:
1. 最开始,我下载了MinGW,然后参考了<<S Programming>> (1999) pp243 的命令:
gcc -O2 -c conv2.c
dllwrap -o conv2.dll --export-all-symbols conv2.o
is.loaded() 返回的是 FALSE !!
2. (其实和方法1.一样)我又下了 Rtools 和 Perl5 ,设置好环境变量后,使用 R CMD SHLIB conv2.c,
making conv2.d from conv2.c
gcc -ID:/R-2.4/include -Wall -O2 -std=gnu99 -c conv2.c -o conv2.o
gcc -shared -s -o conv2.dll conv2.def conv2.o -LD:/R-2.4/bin -lR
问题依旧!
3. In VC++ :
同样参考<<S Programming>>, pp241, 加上 __declspec(dllexport),
好像要使用 lib /def:R.exp /machine:ix86 /out:Rdll.lib 先定义Rdll.lib,然后使用
cl /MT /Ox /D WIN32 /c conv2.c
link /dll /out:conv2.dll /export:conv2 conv2.obj Rdll.lib
可惜我一直没有找到 R.exp (R的mail list)好像有一个主题关于这个R.exp,可惜本人愚笨,还是没能找到!
http://www.stats.uwo.ca/faculty/murdoch/software/compilingDLLs/#general
上面举了可能的原因,偶非计算机出身,没有太明白,好像有关的两个: FPU控制和DLL's export table问题,不知道 rtist 有何建议啊?