Je voudrais utiliser certaines des fonctionnalités incluses dans RcppArmadillo
. Comme je l'ai lu dans un autre article sur SO, si RcppArmadillo.h
est inclus, Rcpp.h
ne doit pas être inclus. C'est ce que j'ai fait, mais en essayant de compiler le fichier .cpp
, j'ai reçu des messages d'erreur. EDIT. Par la suggestion de Dirk, je Comprise RcppArmadillo.h
, ce qui a considérablement réduit le nombre de messages d'erreur: Le code minimum reproductible est ci-dessous:Après avoir inclus RcppArmadillo.h, des erreurs se produisent lors de la compilation du code
#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);
}
Le message d'erreur est ci-dessous:
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
Juste pour rappel, cette le code n'a aucun problème à compiler quand j'utilise Rcpp.h
.
Salut Dirk, merci pour la réponse. J'ai mis à jour mon message avec un exemple reproductible. Par votre suggestion, j'ai seulement inclus 'RcppArmadillo.h', qui s'est débarrassé de 90% des messages d'erreur. – Alex
Merci. Cela va dans la bonne direction, mais je suis au travail et je ne peux pas déboguer votre code pour vous. Simplifiez/changez votre code encore vous savez quelle déclaration unique provoque l'erreur, alors "pensez dur" au sujet de cette ligne. N'hésitez pas à demander ici ou sur rcpp-devel si vous êtes toujours coincé. –