2016-04-01 251 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環境。 –