2016-04-01 252 views
2

我是从源代码构建Rquantlib和我最近一直在遇到此问题:源构建失败

错误.CALL( “RQuantLib_setEvaluationDate”,PACKAGE = “RQuantLib”,evalDate): “ RQuantLib_setEvaluationDate”没有可用的.CALL()为包 “RQuantLib” 错误:无法在包 'RQuantLib'

ř版本3.2.3(2015年12月10日) RCPP版本0.12到负载R的代码。 4

我检查过了,setEvaluationDate()有没有适当的rcpp标签,所以不知道有什么改变。我没有编辑过这个文件。这似乎是一个在线版本,wheras GitHub的版本是一个实际的呼叫:

我RCPP产生inlcude优化版本的功能:

inline bool setEvaluationDate(QuantLib::Date evalDate) { 
    typedef SEXP(*Ptr_setEvaluationDate)(SEXP); 
    static Ptr_setEvaluationDate p_setEvaluationDate = NULL; 

} 

从GitHub:

bool setEvaluationDate(QuantLib::Date evalDate); 
static SEXP RQuantLib_setEvaluationDate_try(SEXP evalDateSEXP) { 
BEGIN_RCPP 
    Rcpp::RObject __result; 
    Rcpp::traits::input_parameter<QuantLib::Date>::type  evalDate(evalDateSEXP); 
    __result = Rcpp::wrap(setEvaluationDate(evalDate)); 
    return __result; 
END_RCPP_RETURN_ERROR 
} 

回答

1

您需要重新编译重大升级后Rcpp的所有家属。

例如,当我们从Ubuntu的15.04跑到15.10它改变了编译器G ++ - 5与新的ABI,跑这此脚本从本地回购重建一切:

#!/usr/bin/env r 

## installed packages 
IP <- installed.packages() 

## all local packages 
AP <- available.packages(contrib.url(getOption("repos")[["local"]])) 

## all packages known to us 
allAP <- available.packages() 

pkgs <- "Rcpp" 
deps <- tools::package_dependencies(packages=pkgs, db=IP, reverse=TRUE) 

## set of dependencies 
alldeps <- unique(sort(do.call(c, deps))) 
cat("Installing these:\n") 
print(alldeps) 

## this makes sense on Debian where no packages touch /usr/local 
libloc <- Sys.getenv("LIBLOC", unset="/usr/local/lib/R/site-library") 

install.packages(alldeps, lib=libloc) 

它类似于当事情在Rcpp的变化中,虽然我们对于不改变接口一直很好。但是如有疑问,请重建。如果有疑问,也可以重新运行compileAttributes(),但在那里几乎没有变化。

编辑:我只是(重新)安装在两个系统上没有毛刺。

编辑2:它也可以直接将R提示:现在

## what follows was one line in R and just broken up for display 
R> cppFunction("bool mySetEvalDate(QuantLib::Date d) " 
       "{ QuantLib::Settings::instance().evaluationDate() = d;" 
       " return true; }", depends="RQuantLib") 
R> mySetEvalDate(Sys.Date()) 
[1] TRUE 
R> 

,如果你的目的是要求setEvaluationDate()从C++,那么你需要看看在讨论有关导出至R 和C++在Rcpp属性的小插曲中。 src/daycounter.cpp中的代码适用于R.

+0

我怀疑它是环境。这一切都是在安装Rcpp示例之后开始的。我根据上述建议重建,仍然没有喜悦。回到去年夏天,我回滚了Rcpp,没有快乐。关键似乎是“内联”与接口的实际功能。 –

+0

反对这种推理的论点是很多测试机器都有多个(或者在我的盒子*全部*的情况下)安装了Rcpp反向依赖关系。那些*几乎肯定会*显示交互,但他们不会。 –

+0

我放弃了,把我的开发移到了我的Mac工作站,一切顺利。当我有更多时间时,我会回到这个位置,很可能会重建我的centos环境。 –