Я начинаю использовать rinside и rcpp в c ++. Я просто хочу начать с нуля, поэтому у моего проекта QT нет ничего, кроме создания экземпляра RInside, и у меня есть проблема, которую я не могу решить. У меня только одна диалоговая форма в проекте.
Файл моего проекта:
QT += core gui
TARGET = rcpp-rinside
TEMPLATE = appSOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.uiINCLUDEPATH += 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.
Вы должен используйте версию Qt, собранную с тем же набором инструментов, который использовался для R — то есть сборку MinGW компилятора.
Я делал это раз в несколько лет в качестве доказательства концепции, исходящей из источников Qt.
Кроме того, я бы настоятельно рекомендуем начать с qtdensity.pro
файл который поставляется с примерами моего пакета RInside.
Вы должны указать компоновщику ссылку на RInside, прежде чем ссылаться на Rcpp. Увидеть этот пост rcpp-devel.
Чтобы qtdensity работал под Windows, вам нужно изменить строку 46 файла qtdensity.pro:
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RCPPLIBS $$RINSIDELIBS
и измените порядок $$ RCPPLIBS и $$ RINSIDELIBS:
QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RINSIDELIBS $$RCPPLIBS
Вы также должны заменить одинарные кавычки на двойные в файле qtdensity.pro, как уже упоминалось. Эти модификации будут в следующей версии RInside (сейчас 0.2.9).
Кроме того, вы должны использовать тот же компилятор для сборки Rcpp & Внутри и скомпилировать ваше приложение Qt.
Просто чтобы поделиться своими «впечатлениями» с Rcpp и Rinside до сих пор в 64-битной Windows 7 и 32-битной Windows XP SP3.
Я установил последнюю версию R (2.15.1) и установил Rcpp и RInside из исходного кода.
install.packages ( «путь / Rcpp_x.x.x.tar.gz», Repos = NULL, то тип = «источник», INSTALL_opts = «- нет-мультиархитектурная»)
C: /R/R-2.15.1/library/RInside/lib/i386/libRInside.a (RInside.o). RInside.cpp 🙁 текст + 0xbd1):
неопределенная ссылка наRcpp::Function::Function(std::string const&)'
vtable для Rcpp :: Language ‘
C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xccd):
undefined reference to
C: /R/R-2.15.1/library/RInside/lib/i386/libRInside.a (RInside.o). RInside.cpp 🙁 текст + 0xcd9):
неопределенная ссылка наRcpp::Language::update()'
Rcpp :: Функция :: ~ Функция ()»
C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xce1):
undefined reference to
C: /R/R-2.15.1/library/RInside/lib/i386/libRInside.a (RInside.o). RInside.cpp 🙁 текст + 0xd2c):
неопределенная ссылка на `Rcpp :: DottedPair :: operator ‘
который, я считаю, относится только к библиотекам, которые не включены должным образом.
— Еще одна вещь, которую я нашел: скрипт, работающий с заголовками и библиотеками для rcpp и rinside в qtdensity.pro, работает только тогда, когда я изменил простые кавычки на двойные кавычки:
вместо :
$$ system ($$ R_HOME / bin / Rscript -e \ ‘Rcpp ::: CxxFlags () \’)
Я изменился на:
$$ system ($$ R_HOME / bin / Rscript -e \ «Rcpp ::: CxxFlags () \»)
Все еще играем с этим и дадим вам знать, что будет дальше 🙂
Andry