2012-07-18 2 views
1

RPM (Yast 포함)을 통해 R을 설치했습니다.Linux에서 g ++로 RInside 프로그램 컴파일

[email protected]:~> locate RInside.so 
/usr/lib64/R/library/RInside/lib/libRInside.so 
/usr/lib64/R/library/RInside/libs/RInside.so 

[email protected]:~> locate Rcpp.so 
/usr/lib64/R/library/Rcpp/lib/libRcpp.so 
/usr/lib64/R/library/Rcpp/libs/Rcpp.so 

파일은 내가 컴파일 할 (rinsidetest.cpp)를 포함

#include <RInside.h> 
#include <Rcpp.h> 

int main (int argc, char *argv[]) 
{ 
    RInside R (argc, argv); 
    return 0; 
} 
다음

이다 내가 컴파일 방법 :

[email protected]:~> g++ rinsidetest.cpp -I /usr/lib64/R/library/RInside/include/ -I /usr/lib64/R/library/Rcpp/include/ -I /usr/lib64/R/include/ -L /usr/lib64/R/library/RInside/libs/ -L /usr/lib64/R/library/Rcpp/libs/ 

/tmp/ccUfdjgZ.o: In function `main': 
rinsidetest.cpp:(.text+0xb7): undefined reference to `RInside::RInside(int, char const* const*, bool)' 
rinsidetest.cpp:(.text+0xc8): undefined reference to `RInside::~RInside()' 
collect2: ld returned 1 exit status 

R 정보 :

> sessionInfo() 
R version 2.15.1 (2012-06-22) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tcltk_2.15.1 tools_2.15.1 
> 

RInside 버전 : 0.2.6
Rcpp 버전 :

0.9.13이 문제에 대한 해결 방법이 있습니까, 아니면이 RPM 설치를 제거하고 컴파일하여 모든 것을 시작 "해야" 근원에서? 그것이 나던 의미로

편집

[email protected]:~/Desktop/abc> g++ rinsidetest.cpp -I /usr/lib64/R/library/RInside/include/ -I /usr/lib64/R/library/Rcpp/include/ -I /usr/lib64/R/include/ -L /usr/lib64/R/library/RInside/lib/ -L /usr/lib64/R/library/Rcpp/lib/ -lRInside 

[email protected]:~/Desktop/abc> ls 
a.out rinsidetest.cpp 

[email protected]:~/Desktop/abc> ./a.out 
./a.out: error while loading shared libraries: libRInside.so: cannot open shared object file: No such file or directory 

답변

2

시도하여 g의 끝 부분에 다음을 추가하면

g++ rinsidetest.cpp -I /usr/lib64/R/library/RInside/include/ -I /usr/lib64/R/library/Rcpp/include/ -I /usr/lib64/R/include/ -L /usr/lib64/R/library/RInside/libs/ -L /usr/lib64/R/library/Rcpp/libs/ -lRInside -lRcpp 

을 가지고

-lRInside -lRcpp 

그래서 ++ 빌드 그게 나타납니다. ou는 필요한 라이브러리에 연결합니다. 라이브러리가 libXYZ 인 경우 g ++을 사용하여 링크해야합니다 (-lXYZ). 아직 수행하지 않은 것으로 나타납니다. 예를 들어 examples/standard/로 다음은

make 

과 말을해야 - 당신은 준비 메이크 파일을 포함하는 디렉토리에 새 테스트 파일

rinsidetest.cpp 

을 삭제하면이 문제

+0

감사합니다. 덕분에 도움이되었습니다. 질문에 새 출력을 추가했습니다. 'a.out'을 실행하는 중에 오류가 발생했습니다. 아직 실종 된 부분이 무엇인지 말해 주시겠습니까? –

+0

이것은 다른 문제입니다. 바이너리가 성공적으로 빌드되었지만 리눅스는 .so를로드 할 수 없다. 추가해야 할 경로 문제 일 수 있습니다. 나는이 문제에 대한 새로운 질문을 게시 하겠지만, C++ 커뮤니티가 더 커지면 r 태그 대신 C++ 태그를 추가하십시오. 나는 당신이 리눅스에 어떻게 파일을 로딩 하는지를 어떻게 말할 지 확신하지 못한다. 그러나 컴파일은 작동하지만 런타임 문제입니다.임시 해결책으로 lib 디렉토리를/usr/lib/디렉토리에 임시 솔루션으로 복사 해보십시오. exe가이 디렉토리 – mathematician1975

+0

@AnishaKaul에서 픽업해야하거나, 바이너리는 – mathematician1975

2

를 해결할 수 있습니다 올바른 실행 파일이 빌드됩니다. 디렉토리를 임베드하여 런타임 링크 문제를 처리합니다.

아이디어는 사용자가 제공된 Makefile을 사용하고 필요에 따라 수정/복사하는 것입니다.

+0

매우 감사드립니다. 그것은 실제로 작동합니다. –

+0

Makefile에서 작업하고 타사 라이브러리가 필요한 경우 필요할 때마다 수정해야합니다. Makefile을 다른 디렉토리에 복사 할 수 있습니다. –

+0

예, 감사합니다. RIDEside에서 RgoogleMaps 프로그램을 컴파일했습니다. 그것은 아주 잘 작동했습니다. 감사. –

관련 문제