2012-09-05 4 views
3

나는 C++에서 rinside와 rcpp를 사용하기 시작했습니다. QT 프로젝트가 RInside 인스턴스를 만드는 것 외에는 아무 것도 없으므로 해결할 수없는 문제가 있습니다. 프로젝트에는 단 하나의 대화 상자 만 있습니다.윈도우에서 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(); 
} 

이있다 아무것도 없다. 내가 R-2.15.1을 사용하고

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' 

, RInside 0.2.7, Rcpp 0.9.10, QT 4.8.0,는 MinGW 4.6 :이 빌드 할 때 , 나는 다음과 같은 오류가 많이 있어요. 1.

+0

또한 .pro 파일에서'lib'를'libs'로 대체해야합니다. –

답변

3

은 R 용으로 사용되는 동일한 툴체인으로 컴파일 된 Qt 버전을 사용해야합니다. 즉, 컴파일러의 MinGW 빌드입니다.

Qt 소스에서 시작하여 개념 증명으로 수년에 한번했습니다.

그 외에도 은 내 RInside 패키지의 예제와 함께 제공되는 qtdensity.pro 파일에서 시작하는 것이 좋습니다.

+0

더 크크 (Dirk)의 답변에 감사드립니다. 나는 MinGW에서 자신을 구축 한 QT를 사용한다. qtdensity 프로젝트에 관해서는 지금도 배우고 있지만 RInside와 Rcpp는 조금씩 시작하고 싶습니다. 다른 버전의 MinGW for R 및 QT가 문제가 될 수 있습니까 ?? –

+0

가능합니다. RInside와 함께 제공되는 Qt *에 대한 작업하고 완전한 예제를 재구성하여 시작하십시오. 그것이 포함 된 이유가 있습니다. 그것은'.pro'의 Windows 쪽에서 비틀기가 필요할 수도 있습니다. –

+0

.pro 파일에서 "조정"을 수행하면 필요한 모든 라이브러리를 찾을 수 있지만 이전과 같은 오류가 발생합니다 ('__gxx_personality_sj0'에 대한 정의되지 않은 참조 ....). 내가 Windows Installer를 사용하는 대신 R을 재 구축해야한다고 생각합니까 ?? –

1

지금까지 Windows 7 64 비트 및 Windows XP SP3 32 비트에서 Rcpp와 Rinside로 "경험"을 공유하기 만하면됩니다. R (2.15.1)의 최신 버전을 설치하고 소스에서 Rcpp 및 RInside를 설치했습니다.

install.packages ("경로/Rcpp_x.xxtar.gz"REPOS = NULL, TYPE = "소스"의 INSTALL_opts = "- 노 multiarch")

  • 에서 win7, --no-multiarch 옵션 없이는 설치할 수 없었습니다.
  • 두 시스템에서 RInside의 모든 표준 예제를 컴파일 할 수 있습니다 (항상 Makefile.win의 --arch32 포함).
  • Win7에서 모든 실행 파일을 실행할 수 있습니다. WinXP에서 QT 예제 qtdensity에 대해 "기본 패키지를로드 할 수 없습니다"오류가 발생했습니다.
  • "더 이상"__gxx_personality_sj0 "및 co가 없습니다. 오류 (약간 개선됨).

C : /R/R-2.15.1/library/RInside/lib/i386/libRInside.a (RInside.o) : RInside.cpp :(대신, 다음과 같은 오류가 있습니다. 텍스트 + 0xbd1) : Rcpp::Function::Function(std::string const&)' C:/R/R-2.15.1/library/RInside/lib/i386/libRInside.a(RInside.o):RInside.cpp:(.text+0xccd): undefined reference to에 대한 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 to Rcpp :: Function :: ~ Function() ' C : /R/R-2.15.1/library/RInside/lib/i386/libRInside.a (RInside.o) : RInside.cpp :(. 텍스트 + 0xd2c) : `Rcpp :: DottedPair :: operator '에 대한 정의되지 않은 참조

내가 제대로 포함되지 않은 라이브러리에만 관련 있다고 생각합니다. - 또 다른 것은 내가 발견 대신 :

$$ 시스템 ($$ R_HOME 스크립트가 나는 따옴표를 두 배로 간단한 따옴표를 변경에만 qtdensity.pro 일에 rcpp 및 rinside에 대한 헤더와 libs와 처리/빈/RSCRIPT -e \ 'Rcpp ::: CXXFLAGS() \')

내가 변경 :

$$ 시스템 ($$ R_HOME/빈/RSCRIPT -e \ "Rcpp ::: CxxFlags() \ ")

01 23,516,

아직도 그것으로 주위 재생 및 Rcpp에 연결하기 전에 RInside에 연결하는 링커를 말해야 다음 : Andry

+1

이 질문은 실제로 대답이 아니기 때문에 질문에 의미있게 덧붙일 수 있습니까? –

3

오고 있는지 알려드립니다. this rcpp-devel post을 참조하십시오.

QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RCPPLIBS $$RINSIDELIBS 

및 $$ RCPPLIBS 및 $$ RINSIDELIBS의 순서로 전환 :

QMAKE_LIBS += $$RLDFLAGS $$RBLAS $$RLAPACK $$RINSIDELIBS $$RCPPLIBS 
을 qtdensity를 들어

윈도우에서 작동하는, 당신은 qtdensity.pro 파일의 라인 (46)을 수정해야

qtdensity.pro 파일에서 작은 따옴표를 큰 따옴표로 바꾸어야합니다. 이러한 수정 사항은 RInside의 다음 버전 (현재 0.2.9)에 포함될 예정입니다.

또한 Rcpp & RInside를 빌드하고 Qt 애플리케이션을 컴파일하는 데 동일한 컴파일러를 사용해야합니다.