1
我想使用RcppArmadillo
中包含的一些功能。正如我在SO上的另一篇文章中讀到的,如果包含RcppArmadillo.h
,則不應包含Rcpp.h
。我只是這樣做的,但是當試圖編譯.cpp
文件時,我收到了一些錯誤消息。 編輯。每德克的建議,我只包括RcppArmadillo.h
,這顯著減少錯誤信息的數量:最小程度重複性代碼如下:在包含RcppArmadillo.h後,編譯代碼時發生錯誤
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
template <class RandomAccessIterator, class StrictWeakOrdering>
void sort(RandomAccessIterator first, RandomAccessIterator last, StrictWeakOrdering comp);
struct val_order{
int order;
double value;
};
bool compare(const val_order & a, const val_order & b){return (a.value<b.value);}
// [[Rcpp::export]]
IntegerVector order(NumericVector x){
int n=x.size();
std::vector<int> output(n);
std::vector<val_order> index(n);
for(int i=0;i<x.size();i++){
index[i].value=x(i);
index[i].order=i;
}
std::sort(index.begin(), index.end(), compare);
for(int i=0;i<x.size();i++){
output[i]=index[i].order;
}
return wrap(output);
}
錯誤消息如下:
Error in sourceCpp("functions.cpp") :
Error 1 occurred building shared library.
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/x86_64'
ld: warning: directory not found for option '-L/usr/local/lib/gcc/i686-apple-darwin8/4.2.3'
ld: library not found for -lgfortran
collect2: ld returned 1 exit status
make: *** [sourceCpp_44748.so] Error 1
只是重申,這代碼在編譯時沒有問題,當我使用Rcpp.h
時。
嗨德克,謝謝你的回覆。我用一個可重現的例子更新了我的帖子。根據你的建議,我只包含了'RcppArmadillo.h',它消除了90%的錯誤信息。 – Alex
謝謝。這是正確的方向,但我在工作,不能爲您調試您的代碼。簡化/更改你的代碼,你仍然知道哪個單一的陳述會導致錯誤,然後「認真思考」該行。如果您仍然陷入困境,請隨時在此處或rcpp-devel詢問。 –