创建嵌入式 R 实例时执行卡住
Posted
技术标签:
【中文标题】创建嵌入式 R 实例时执行卡住【英文标题】:Execution stuck while creating embedded R instance 【发布时间】:2017-08-10 09:19:47 【问题描述】:我正在使用 RInside 将 R 集成到 Qt 应用程序中。目前,我正在尝试运行 RInside 包中的 Qt 示例。我能够构建示例,但在了。
#include <QApplication>
#include "qtdensity.h"
int main(int argc, char *argv[])
qDebug() << "First";
RInside R(argc, argv); // Execution halts at this point
qDebug() << "Second";
QApplication app(argc, argv);
QtDensity qtdensity(R); // pass R inst. by reference
return app.exec();
在创建嵌入式 R 实例时执行被卡住并且没有给出任何错误。
使用的工作环境
RInside 包:版本 0.2.14
Linux 版本:Red Hat Enterprise Linux 客户端版本 5.8 (Tikanga)
R : 3.1.1
Rcpp 库:0.11.4
RInside 库:0.2.14
Qt:4.7.4
任何帮助或建议将不胜感激。谢谢。
更新:
现在,我在 rinside_sample0.cpp 中尝试一个更简单的示例。
#include <RInside.h> // for the embedded R via RInside
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
cout << "Starting \n";
RInside R(argc, argv); // create an embedded R instance
cout << "R instance created\n";
R["txt"] = "Hello, world!\n"; // assign a char* (string) to 'txt'
R.parseEvalQ("cat(txt)"); // eval the init string, ignoring any returns
exit(0);
此代码在运行时也卡住了。它卡在RInside R(argc, argv);
现在,当我将 R_HOME 设置为我的 R 目录时,执行会给我这个错误:
cannot find system Renviron
Fatal error: unable to open the base package
编译日志:
g++ -I/pkg/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/include -I/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include -I/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/include -g -O2 -Wall -I/usr/local/include rinside_sample0.cpp -Wl,--export-dynamic -fopenmp -L/pkg/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/lib -lR -lrt -ldl -lm -licuuc -licui18n -Wl,-rpath,"/pkg/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5"/lib -L/pkg/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/lib -lRblas -L/pkg/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/lib -lRlapack -L/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/lib -lRInside -Wl,-rpath,/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/lib -o rinside_sample0
In file included from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/RcppCommon.h:34,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp.h:27,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/include/RInsideCommon.h:38,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/include/RInside.h:26,
from rinside_sample0.cpp:10:
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:35: warning: ignoring #pragma push_macro
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:40: warning: ignoring #pragma push_macro
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:45: warning: ignoring #pragma push_macro
In file included from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/RcppCommon.h:34,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp.h:27,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/include/RInsideCommon.h:38,
from /pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/RInside/include/RInside.h:26,
from rinside_sample0.cpp:10:
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:60: warning: ignoring #pragma pop_macro
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:64: warning: ignoring #pragma pop_macro
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/r/headers.h:68: warning: ignoring #pragma pop_macro
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/Date.h: In member function ‘void Rcpp::Date::update_tm()’:
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/Date.h:108: warning: converting to ‘time_t’ from ‘double’
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/Date.h: In function ‘Rcpp::Date Rcpp::operator+(const Rcpp::Date&, int)’:
/pkg/.site/pkgs05/OSS-R-/3.1.1/x86_64-linux2.6-glibc2.5/lib64/R/library/Rcpp/include/Rcpp/Date.h:139: warning: converting to ‘time_t’ from ‘double’
【问题讨论】:
几周前我最后一次重新访问时仍然为(在 Ubuntu 上)工作。您需要提供更多详细信息,我建议您也尝试一些更简单的示例。 @DirkEddelbuettel 您好 Dirk,我现在尝试在标准文件夹中运行 rinside_sample0 示例,但仍然面临同样的问题。我已经用更多细节更新了这个问题。请看一下。 您的构建日志只是部分的。我怀疑 R 可能不是作为共享库构建的,因此无法在该平台上嵌入。 @DirkEddelbuettel 感谢您的建议。我将尝试将 R 构建为共享库。 【参考方案1】:感谢 Dirk 的建议。我使用的R installation
是基于RHEL6
构建的,而我正在使用RHEL5
。所以,我重新安装了 R 包。我在我的RHEL5
机器上安装了R 3.1.3
和兼容的RInside
和Rcpp
库。安装修复后,示例开始运行。
使用的工作环境
RInside 包:版本 0.2.14
Linux 版本:Red Hat Enterprise Linux 客户端版本 5.8 (Tikanga)
R : 3.1.3
Rcpp 库:0.12.12
RInside 库:0.2.14
Qt:4.7.4
【讨论】:
以上是关于创建嵌入式 R 实例时执行卡住的主要内容,如果未能解决你的问题,请参考以下文章
嵌入式框架中的 CLLocationManager 实例不请求授权?
当嵌入式数组对象更改时,Mongoose 实例 .save() 不起作用