首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在windows中结合使用rinside和qt

在windows中结合使用rinside和qt
EN

Stack Overflow用户
提问于 2012-09-05 19:45:18
回答 3查看 1.5K关注 0票数 4

我开始在c++中使用rinside和rcpp。我只想从零开始,这样我的QT项目只需要创建一个RInside实例,并且我有一个无法解决的问题。我在项目中只有一个对话框窗体。

我的项目文件:

代码语言:javascript
复制
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

主文件:

代码语言:javascript
复制
#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();
}

对于其他文件,没有任何内容,因为它只是一个空表单。当我构建这个代码的时候,我得到了很多类似下面这样的错误:

代码语言:javascript
复制
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。

EN

回答 3

Stack Overflow用户

发布于 2012-09-05 19:58:13

您必须使用与R相同的工具链构建的Qt版本--即编译器的MinGW版本。

我从Qt源码开始,几年前就做过一次概念验证。

除此之外,我强烈建议从我的RInside包示例附带的qtdensity.pro文件开始。

票数 3
EN

Stack Overflow用户

发布于 2012-11-28 23:42:10

在链接到RInside之前,您必须告诉链接器链接到Rcpp。参见this rcpp-devel post

要在windows下工作,您需要修改qtdensity.pro文件的第46行:

代码语言:javascript
复制
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RCPPLIBS $$RINSIDELIBS

并切换$$RCPPLIBS和$$RINSIDELIBS的顺序:

代码语言:javascript
复制
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RINSIDELIBS $$RCPPLIBS

如前所述,您还必须在qtdensity.pro文件中将单引号替换为双引号。这些修改将出现在RInside的下一个版本(目前为0.2.9)中。

此外,您必须使用相同的编译器来构建Rcpp和RInside并编译您的Qt应用程序。

票数 3
EN

Stack Overflow用户

发布于 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-选项,我无法安装

  • 。我可以在两个系统中编译所有标准的RInside示例(在Makefile.win)
  • I中始终使用--
  • 可以运行Win7中的所有可执行文件。在WinXP中,我有错误"unable to load base package"
  • for the QT example qtdensity,我没有"__gxx_personality_sj0“和co。错误(这是一个小小的改进)。相反,我有以下错误:

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12280707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档