Armadillo + Blas + Lapack: ¿Error de enlace?
Pregunta
Cuando intento compilar example1.cpp que viene con Armadillo 2.4.2, sigo obteniendo el siguiente error de enlace:
/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
¿Puede alguien ayudar?I manualmente instalé
- Última versión de Blas
- lapack-3.4.0
- Boost-1.48.0
- Última versión de Atlas
Estoy usando Ubuntu 11.04 en el modelo MacBook Pro 7,1
Solución
¡Muchas gracias a OSGX!Después de leer su comentario, ¡tomé un segundo vistazo al archivo README!Resulta que me faltaba '-O1 -Larmadillo' en el comando!
Aquí está el comando que solía hacerlo funcionando:
g++ example1.cpp -o example1 -O1 -larmadillo
Error estúpido, lo sé ... Sólo va a recordarle lo importante que es leer el Readme.
El readme también menciona:
Si obtiene errores de vinculación, o si se instaló Armadillo manualmente y especificó que Lapack y Blas están disponibles, lo harás Necesidad de enlazar explícitamente con Lapack y Blas (o sus equivalentes), Por ejemplo:
g++ example1.cpp -o example1 -O1 -llapack -lblas
No tenía que incluir '-llapack -lblas', pero tal vez esto ayudará a alguien más que tiene problemas similares.
Otros consejos
Hay una rareza que acabo de descubrir comparando las compilaciones de código previamente de trabajo con el problema de este hilo, destacando la participación del GNU CC (no soy experto en esto): en mi compilación de la máquina el éxito depende del ordende parámetros al gcc / g ++ donde G ++ Infile -o Outfile -Libarmadillo ... trabajó, pero G ++ -Libarmadillo Infile -o Outfile ... no fue con (casi) el mismo error que se mencionó anteriormente. (Espero que eso ayude).
a partir de 5.0.0 (también puede aplicarse a versiones anteriores)
En realidad, necesita -larmadillo
, en fedora 21 -llapack
y -lopenblas
, ya no es necesario,