我已經用Rcpp製作了一個R包,以使用我在C++中編程的庫的方法。dyn.load將包與Rcpp鏈接在一起的錯誤
我有R於最後一個版本上運行:
R version 3.2.5 (2016-04-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04 LTS
我執行下面的命令來安裝我的包:
> install.packages("mypackage", repos = NULL)
包編譯好了,我有的.o我的源代碼文件,但在鏈接階段,我得到了錯誤:
* installing *source* package ‘rbdd’ ...
** libs
make: No se hace nada para 'all'.
installing to /home/sergio/R/x86_64-pc-linux-gnu-library/3.2/mypackage/libs
** R
** preparing package for lazy loading
** help
Warning: /home/sergio/R/mypackage/man/mypackage-package.Rd:27: All text must be in a section
Warning: /home/sergio/R/mypackage/man/mypackage-package.Rd:28: All text must be in a section
*** 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/sergio/R/x86_64-pc-linux-gnu-library/3.2/mypackage/libs/mypackage.so':
/home/sergio/R/x86_64-pc-linux-gnu-library/3.2/mypackage/libs/mypackage.so: undefined symbol: _ZN4cudd12defaultErrorENSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE
Error: loading failed
Ejecución interrumpida
ERROR: loading failed
mypackge.so is cre在我的包裹的src
文件夾中。
我有一個Makevars文件(src
,太)具有以下內容:
PKG_CPPFLAGS=-I./buddy-2.5/src -I./cudd-3.0.0/cudd -I./cudd-3.0.0/mtr -I./cudd-3.0.0/cplusplus -I./cudd-3.0.0/dddmp -I./cudd-3.0.0/util -I./cudd-3.0.0 -isystem /usr/include/c++/v1 -std=c++11
PKG_LIBS=-lc++ -L/lib
和我的空間文件有行:
useDynLib(mypackage)
exportPattern("^[[:alpha:]]+")
importFrom(Rcpp, evalCpp)
有人知道如何解決這個問題問題?
確保你在'DESCRIPTION'中有'LinkingTo:Rcpp',並且你在'NAMESPACE'中導入了至少一個來自Rcpp的對象,以確保Rcpp被加載。 – Jeroen
@Jeroen是的,我有'LinkingTo:Rcpp'行,我加載Rcpp,我添加了我的'NAMESPACE'文件的內容。 –