7
votes

Armadillo + Blas + Lapack: Erreur de liaison?

Lorsque j'essaie de compiler l'exemple1.cpp fourni avec Armadillo 2.4.2, je continue à obtenir l'erreur de liaison suivante:

/tmp/ccbnLbA0.o: In function `double arma::blas::dot<double>(unsigned int, double const*, double const*)':
main.cpp:(.text._ZN4arma4blas3dotIdEET_jPKS2_S4_[double arma::blas::dot<double>(unsigned int, double const*, double const*)]+0x3b): undefined reference to `wrapper_ddot_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x68): undefined reference to `wrapper_dgemv_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemmIdEEvPKcS3_PKiS5_S5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemm<double>(char const*, char const*, int const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x7a): undefined reference to `wrapper_dgemm_'
collect2: ld returned 1 exit status
  • Dernière version de Blas LI>
  • Lapack-3.4.0 LI>
  • boost-1.48.0 li>
  • Dernière version d'Atlas LI> ul>

    J'utilise Ubuntu 11.04 sur le modèle MacBook Pro 7,1 P> P>


1 commentaires

On dirait que votre armadillo n'est pas correctement configuré ou la bibliothèque nécessaire n'est pas mentionnée dans la chaîne de compilation. Pouvez-vous montrer comment vous compilez exemple1.cpp


3 Réponses :


16
votes

Merci beaucoup à Osgx! Après avoir lu son commentaire, j'ai pris un deuxième regard sur le fichier README! Il s'avère que j'étais manquant '-O1 -Larmadillo' dans la commande!

Voici la commande que j'avais l'habitude de le faire fonctionner: p> xxx pré>

stupide erreur, je sais. ... il va juste vous rappeler à quel point il est important de lire le fichier README. P>

Le README mentionne également: p>

Si vous obtenez des erreurs de liaison ou si Fermadillo a été installé manuellement. et vous avez spécifié que Lapack et Blas sont disponibles, vous allez besoin de lier explicitement avec Lapack et Blas (ou leurs équivalents), Par exemple: P>

g++ example1.cpp -o example1 -O1 -llapack -lblas


1 commentaires

C'était exactement ce que je cherchais! Avoir à relier lapack et blas uniquement. Je suis également coupable de ne pas lire le ReadMe alors ne vous sentez pas mal. J'étais en train de compiler et d'obtenir des références indéfinies à mon popack et à mon blas: 'cgemv_', 'sdot _' , ... etc ...



0
votes

à partir de 5.0.0 (peut également s'appliquer aux versions antérieures)

Vous avez réellement besoin -Larmadillo , sur fedora 21 -llapack et -Lopenblas ne sont plus obligatoires .


0 commentaires

1
votes

Il y a une bizarrerie que je viens de découvrir en comparant des compilations de code auparavant au problème avec le problème même de ce fil, soulignant l'implication de la GNU cc (je ne suis pas un expert en cela): sur mon succès de la compilation de la machine dépend de la commande des paramètres à la GCC / G ++ où g ++ infile -o Outfile -Libarmadillo ... a travaillé, mais G ++ -Libarmadillo Infile -o Outfile ... n'a pas eu avec (presque) la même erreur que celle mentionnée ci-dessus. (espère que cela aide).


0 commentaires