2017-01-11 11 views
1

CVOC라는 R 패키지를 만들고 있습니다. 여기에는 C++ 코드가 포함되어 있으며 C 라이브러리 gmp의 고정밀 산술을 사용합니다.R 패키지를 생성하는 중 오류가 발생했습니다 : dyn.load (파일, DLL 경로 = DLL 경로, ...)의 오류

패키지는 다음 단계에 의해 생성 될 : 패키지 골격을 만들 Rcpp :: Rcpp.package.skeleton를 사용

1). 정확한 폴더

3

) roxygen2를 사용 .Rd 문서 파일 생성으로 등 DESCRIPTION, NAMESPACE, Makevars 등 필요한 파일을 복사하는

2) :: roxygenise()

4) R CMD 확인하여 R-패키지를 확인

5) 내가 R의 CMD는 다음과 같은 오류 메시지가 온다 "CVOC"을 확인 실행하면 R CMD는

를 구축하여 R-패키지를 구축까지 :

* installing *source* package ‘CVOC’ ... 
** libs 
g++ -std=c++11 -I/usr/share/R/include -DNDEBUG -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include" -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/RcppMP/include" -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/BH/include" -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c RcppExports.cpp -o RcppExports.o 
g++ -std=c++11 -I/usr/share/R/include -DNDEBUG -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include" -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/RcppMP/include" -I"/home/fabian/R/x86_64-pc-linux-gnu-library/3.2/BH/include" -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -c etcND.cpp -o etcND.o 
g++ -std=c++11 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o CVOC.so RcppExports.o etcND.o -L/usr/lib/R/lib -lR 
installing to /home/fabian/Desktop/CVOCcreate/CVOC.Rcheck/CVOC/libs 
** R 
** preparing package for lazy loading 
** help 
*** installing help indices 
** building package indices 
** testing if installed package can be loaded 
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
unable to load shared object '/home/fabian/Desktop/CVOCcreat/CVOC.Rcheck /CVOC/libs/CVOC.so': 
    /home/fabian/Desktop/CVOCcreate/CVOC.Rcheck/CVOC/libs/CVOC.so:    
undefined symbol: __gmp_bits_per_limb 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing ‘/home/fabian/Desktop/CVOCcreate/CVOC.Rcheck/CVOC’ 

bash 스크립트 createCVOC.sh를 포함한 모든 필요한 파일은 github 저장소 https://github.com/SchroederFabian/CVOC에 있습니다.

도움을 주시면 감사하겠습니다.

답변

4

뭔가 잘못 됐으니 확인해주세요. 당신은 친절 아직 그러한 연결이 발생하지 당신이 당신의 질문에 표시 로그인 당신이

CXXFLAGS= -lgmpxx -lgmp 

이 그 사실 쇼에서와 당신의 에 대한 링크를 제공

본질적으로
g++ -std=c++11 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions \ 
    -Wl,-z,relro -o CVOC.so RcppExports.o etcND.o -L/usr/lib/R/lib -lR 

당신은

혼란
  • 당신이 compilati을 위해, 즉 일반 사람 (기존 규칙 에 "추가"를 허용하는 PKG_* 변형 원하는 경우 PKG_CXXFLAGS) 및

  • PKG_LIBS이 필요할 때 PKG_CXXFLAGS을 사용했습니다.

시도

PKG_LIBS= -lgmpxx -lgmp 

를 추가하고 다시 시도하십시오. 연결 단계가 발생하는지 확인하십시오. 필요한 라이브러리를 추가해야하며 더 이상 '알 수없는 기호'가 없습니다.

+0

감사합니다. 제안한대로 Makevars 파일의 줄을 PKG_LIBS = -lgmpxx -lgmp로 변경했습니다. 그러나 로그의 플래그를 변경하지 않아도 변경되지 않습니다. 동일한 오류 '알 수없는 기호'가 나타납니다. – fabianschroeder

+0

당신의 의견은 Makevars 파일을 src 폴더 대신 루트 폴더에 복사했다는 것을 알게되었습니다. 지금은 효과가있는 것 같습니다. 고맙습니다! – fabianschroeder

+0

GitHub 레포에서하는 일은 드문 것 같습니다. 매번 골격 함수를 다시 실행하거나 파일을 복사 할 이유가 없습니다. 올바른 레이아웃을 작성하고 커밋하십시오. 수많은 다른 저장소와 그 저장소의 기능을 살펴보십시오. 또한, 답변이 도움이된다면, 그것을 받아들이십시오 ('틱'마크 만 클릭하십시오). –