我有兴趣编写一个能够运行 R 脚本的 c++ 程序。出于几个设计原因,我想创建一个 RInside 实例,执行脚本,获取结果,然后销毁该实例;都在一个线程中。我知道 R 不是多线程的,并且不能创建 RInside 的多个实例。但是我可以在隔离线程中创建单个实例吗?当我尝试这样做时,我的代码会编译,但在运行时出现以下错误:
Error: C stack usage is too close to the limit
Error: C stack usage is too close to the limit
terminate called after throwing an instance of 'Rcpp::binding_not_found'
what(): binding not found: '.AutoloadEnv'
Aborted
这是产生错误的代码:
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <RInside.h>
void *thread_main(void *args){
RInside R(0,NULL);
/* hope to execute an R script here */
printf("--printing from thread--\n");
return NULL;
}
int main(int argc, char *argv[]){
pthread_t tid;
if( pthread_create(&tid, NULL, thread_main, NULL) ){
printf("failed to create thread\n");
return -1;
}
sleep(1);
return 0;
}
我已尝试R_CStackLimit = (uintptr_t)-1
按照编写 R 扩展中的建议进行设置,但无济于事。
我正在运行 ubuntu,R 版本 2.15.2,RInside 版本 0.2.10。
有可能做到这一点吗?还是我必须学习 Rserve 之类的东西?太感谢了!