Rquantlib的源代码构建失败

时间:2016-04-01 19:36:09

标签: r rcpp

我正在从源代码构建Rquantlib,最近我遇到了这个问题:

  

.Call中的错误(“RQuantLib_setEvaluationDate”,PACKAGE =“RQuantLib”,evalDate):     “RQuantLib_setEvaluationDate”对于包“RQuantLib”的.Call()不可用   错误:无法在包'RQuantLib'中加载R代码

R版本3.2.3(2015-12-10) Rcpp版本0.12.4

我已经检查了setEvaluationDate()是否有适当的rcpp标签,所以不确定发生了什么变化。我没有编辑过该文件。它似乎是一个内联版本,而github版本是一个实际的调用:

我的rcpp为函数生成了inlcude verion:

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 个答案:

答案 0 :(得分:1)

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

例如,当我们从Ubuntu 15.04转到15.10时,使用新的ABI将编译器更改为g ++ - 5,运行此脚本以重建来自本地存储库的所有内容:

#!/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> 

现在,如果您打算从C ++调用setEvaluationDate(),那么您需要查看有关在Rcpp Attributes插图中导出到R 和C ++ 的讨论。 src/daycounter.cpp中的代码适用于R。