我开始在c++中使用rinside和rcpp。我只想从零开始,这样我的QT项目只需要创建一个RInside实例,并且我有一个无法解决的问题。我在项目中只有一个对话框窗体。
我的项目文件:
QT += core gui
TARGET = rcpp-rinside
TEMPLATE = app
SOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui
INCLUDEPATH += C:\R\R-2.15.1\include
INCLUDEPATH += C:\R\R-2.15.1\library\Rcpp\include
INCLUDEPATH += C:\R\R-2.15.1\library\RInside\include
LIBS += -LC:\R\R-2.15.1\bin\i386 -lR
LIBS += -LC:\R\R-2.15.1\library\Rcpp\lib\i386\ -lRcpp
LIBS += -LC:\R\R-2.15.1\library\RInside\lib\i386\ -lRInside主文件:
#include <QtGui/QApplication>
#include "dialog.h"
int main(int argc, char *argv[])
{
RInside R(argc, argv);
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}对于其他文件,没有任何内容,因为它只是一个空表单。当我构建这个代码的时候,我得到了很多类似下面这样的错误:
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x39c): undefined reference to `__gxx_personality_sj0'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x3bb): undefined reference to `_Unwind_SjLj_Register'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x419): undefined reference to `_Unwind_SjLj_Unregister'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x471): undefined reference to `_Unwind_SjLj_Resume'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x4cc): undefined reference to `__gxx_personality_sj0'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x4eb): undefined reference to `_Unwind_SjLj_Register'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x608): undefined reference to `_Unwind_SjLj_Unregister'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x64c): undefined reference to `_Unwind_SjLj_Unregister'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x746): undefined reference to `_Unwind_SjLj_Unregister'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x7f6): undefined reference to `_Unwind_SjLj_Resume'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x84c): undefined reference to `__gxx_personality_sj0'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x86b): undefined reference to `_Unwind_SjLj_Register'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x8c6): undefined reference to `_Unwind_SjLj_Unregister'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x9c5): undefined reference to `_Unwind_SjLj_Resume'
C:\R\R-2.15.1\library\RInside\lib\i386\/libRInside.a(RInside.o):RInside.cpp:(.text+0x9ec): undefined reference to `__gxx_personality_sj0'我使用的是R-2.15.1、RInside 0.2.7、Rcpp 0.9.10、QT 4.8.0、MinGW 4.6.1。
发布于 2012-09-05 19:58:13
您必须使用与R相同的工具链构建的Qt版本--即编译器的MinGW版本。
我从Qt源码开始,几年前就做过一次概念验证。
除此之外,我强烈建议从我的RInside包示例附带的qtdensity.pro文件开始。
发布于 2012-11-28 23:42:10
在链接到RInside之前,您必须告诉链接器链接到Rcpp。参见this rcpp-devel post。
要在windows下工作,您需要修改qtdensity.pro文件的第46行:
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RCPPLIBS $$RINSIDELIBS并切换$$RCPPLIBS和$$RINSIDELIBS的顺序:
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RINSIDELIBS $$RCPPLIBS如前所述,您还必须在qtdensity.pro文件中将单引号替换为双引号。这些修改将出现在RInside的下一个版本(目前为0.2.9)中。
此外,您必须使用相同的编译器来构建Rcpp和RInside并编译您的Qt应用程序。
发布于 2012-09-07 21:07:42
仅分享我在Windows7 64位和Windows XP SP3 32位中使用Rcpp和Rinside的“经验”。我安装了最新版本的R (2.15.1),并从源代码安装了Rcpp和RInside。
install.packages("path/Rcpp_x.x.x.tar.gz",repos=NULL,type=“源”,INSTALL_opts=“--no-install.packages”)
在win7中,如果没有--no-选项,我无法安装
Function C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xbd1):对Rcpp::Language的函数vtable的未定义引用‘C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xcd9):对Rcpp::Language::update()' C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xce1): undefined reference toRcpp::Function::~Function()’C:/R/R-2的未定义引用运算符对‘`Rcpp::DottedPair::.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xd2c):’的引用未定义
我认为这只与没有正确包含的库相关。-我发现的另一件事:在qtdensity.pro中处理rcpp和rinside的头和库的脚本只有在我将单引号改为双引号时才能工作:而不是:
标志($$R_HOME/bin/Rscript$$system\‘Rcpp:CxxFlags()\’)
我更改为:
标志($$R_HOME/bin/Rscript$$system\“Rcpp:CxxFlags()\”)
还在玩它,我会让你知道下一步是什么:) Andry
https://stackoverflow.com/questions/12280707
复制相似问题