2013-05-20 4 views
1

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.

Répondre

1

Quelques choses:

  1. Votre message n'est pas utile. Nous n'avons pas besoin de douzaines de lignes de messages d'erreur, mais nous avons besoin de code reproductible. Ce que vous n'avez pas inclus.

  2. Vous incluez plusieurs en-têtes C++ et plusieurs en-têtes R. Ne pas.

  3. N'incluez qu'un seul en-tête: RcppArmadillo.h et si cela échoue, postez un exemple reproductible.

Edit: Merci pour votre mise à jour. Votre code compile maintenant, votre erreur est une erreur de lien. Vous avez simplement besoin d'installer le compilateur Fortran sous OS X.

+0

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

+0

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é. –

Questions connexes