R包由32位和64位窗口上的GSL库之间的差异引起的错误?

时间:2017-09-09 00:22:10

标签: c++ r windows

我正在使用GNU GSL库处理R包。 GSL库是从scrapy request and response下载的。通过R CMD检查编译x64和i386。源包也可以安装在32位和64位窗口上。在64位窗口上一切正常。

但是,程序包在32位窗口崩溃并抛出以下错误消息 “gsl :: \ blas \ blas.c:107错误长度默认GSL错误处理程序被调用”

我检查了原始源代码

gsl_vector_view ci = gsl_matrix_row (A, i);
gsl_vector_view ck = gsl_matrix_row (A, k);
Rprintf("cisize=%d\n,cksize=%d\n",ci.vector.size,ck.vector.size);

gsl_vector_view di = gsl_vector_subvector(&ci.vector, 0, i);
gsl_vector_view dk = gsl_vector_subvector(&ck.vector, 0, i);
Rprintf("disize=%d\n,dksize=%d\n",di.vector.size,dk.vector.size);
gsl_blas_ddot (&di.vector, &dk.vector, &sum);

错误是由于di.vector.size和dk.vector.size导致的最后一行代码gsl_blas_ddot造成的。

在Windows 64上,输出打印为:

cisize=5
cksize=5
disize=1
dksize=1

在Windows 32上,输出打印不固定,一个输出是:

cisize=337939976
cksize=1
disize=0
dksize=326253992

另一个输出是

cisize=251898432
cksize=1
disize=0
dksize=151229056

任何人都可以知道问题出在哪里?

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现错误是由“gsl_matrix_row”函数引起的,我重写了代码来自己实现这个函数:

gsl_vector *di=gsl_vector_alloc(i);
gsl_vector *dk=gsl_vector_alloc(i);
for(l = 0; l < i; l++)
 {
     gsl_vector_set(di,l,gsl_vector_get(ci,l));
     gsl_vector_set(dk,l,gsl_vector_get(ck,l));
 }

gsl_vector_free(di);
gsl_vector_free(dk);

但是,我仍然不知道为什么“gsl_matrix_row”在32位Windows机器下无效。