1

に含まれている機能の一部を使用したいと考えていますRcppArmadillo。SOに関する別の投稿で読んだように、含まれている場合RcppArmadillo.hは含まれるRcpp.hべきではありません。私はそれをやっただけですが、.cppファイルをコンパイルしようとすると、いくつかのエラーメッセージが表示されました. 編集。Dirk の提案に従って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

4

1 に答える 1

1

いくつかのこと:

  1. あなたの投稿は役に立ちません。何十行ものエラー メッセージは必要ありませんが、再現可能なコードは必要です。あなたが含めなかったもの。

  2. いくつかの C++ ヘッダーいくつかの R ヘッダーを含めます。しないでください。

  3. 1 つのヘッダーのみを含めます: RcppArmadillo.h。それが失敗した場合は、再現可能な例を投稿してください。

編集:更新していただきありがとうございます。コードがコンパイルされるようになりました。エラーはリンカ エラーです。OS X に Fortran コンパイラをインストールするだけです。

于 2013-05-20T13:05:49.563 に答える