Esta librería permite ejecutar cálculos matriciales de una forma muy sencilla. Para utilizarla, deberéis instalar algunas librerías extra. A continuación tenéis la manera de instalar todas las librerias necesarias (incluída la de Armadillo) para poder utilizar posteriormente en proyectos en el lenguaje C++
Lo único que debemos hacer es abrir el terminal de Linux (yo lo he hecho en Linux Mint), y ejecutamos la siguiente instrucción:
sudo apt-get install liblapack-dev libblas-dev libboost-dev libarmadillo-dev
Una vez instalado, ya podréis importarla por ejemplo a proyectos de Eclipse.
Ahora vamos a ver cómo se puede hacer esto en Eclipse.
1- Hacemos clic derecho en el nombre del proyecto y en Properties. Buscamos la opción C/C++ Build y en Settings. Seleccionamos la opción Includes de GCC C++ Compiler.
2-A continuación añadiremos un fichero que contiene la librería de Armadillo. Para ello, en el apartado "Include files (-include)" [parte de abajo], hacemos clic en el icono de añadir fichero y tecleamos la siguiente ruta:
/usr/include/armadillo
2.5- Algunos usuarios comentan que han necesitado un paso extra. Añadir armadillo en GCC C++ Linker en la pestaña Libraries. Es posible que dependa de la versión de Linux o de la librería armadillo, así que lo añado aquí por si hay mas casos en los que con el resto de pasos no es suficiente. ¡Gracias por vuestra aportación!
3- Por último hacemos clic en Apply y OK. Ya podemos probar a incluir la librería de Armadillo en nuestro código y compilar nuestro programa para confirmar que se ha indexado correctamente.
Esta librería tiene muchas funciones interesantes. Podéis obtener más información en la web oficial.
¡Hasta la próxima!
Corregir es /usr/include/armadillo
ResponderEliminarCierto. Se me había escapado una 's' en la ruta de la librería. Ya está corregido. Muchas gracias
EliminarA pesar que segui los pasos no me reconoce la libreria arma, inclui esto /usr/include/armadillo_bits pero aun sigo teniendo inconvenientes al compilar
ResponderEliminarmake all
Building file: ../src/Prueba.cpp
Invoking: GCC C++ Compiler
g++ -include/usr/include/armadillo -include/usr/include/armadillo_bits -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Prueba.d" -MT"src/Prueba.d" -o "src/Prueba.o" "../src/Prueba.cpp"
cc1plus: fatal error: /usr/include/armadillo_bits: No existe el archivo o el directorio
compilation terminated.
src/subdir.mk:18: recipe for target 'src/Prueba.o' failed
make: *** [src/Prueba.o] Error 1
Sabes alguna solucion?
Por lo que he leído, según la versión de Linux que tengas, los archivos de Armadillo estarán en /usr/include/armadillo o en /usr/include/armadillo_bits. No tendrás los dos directorios a la vez.
EliminarEl error dice que el directorio /usr/include/armadillo_bits no existe en tu máquina, así que, si se te instaló sin errores la librería, debería encontrarse en /usr/include/armadillo.
Por tanto, armadillo_bits quítalo.
Se me ocurre que podrías abrir un terminal y escribir este comando:
"whereis armadillo"
Con ese comando deberías conseguir la ruta en la que se te ha instalado la librería, y por tanto la que deberías poner en Eclipse. Si no te devuelve nada ese comando es porque no está instalado, quizás por algún error al intentar instalarlo.
Ojalá te sea de ayuda. Si sigues teniendo problemas, no tengas dudas en comentarlo, ayudaremos en lo que podamos ;)
Revise eso y deje solo la libreria armadillo y elimine del include /usr/include/armadillo_bits, lo agregue dado que me salia este error:
ResponderEliminarBuilding target: Prueba
Invoking: GCC C++ Linker
g++ -o "Prueba" ./src/Prueba1.o
./src/Prueba1.o: En la función `void arma::lapack::gesv(int*, int*, double*, int*, int*, double*, int*, int*)':
/usr/include/armadillo_bits/lapack_wrapper.hpp:643: referencia a `wrapper_dgesv_' sin definir
./src/Prueba1.o: En la función `void arma::lapack::gels(char*, int*, int*, int*, double*, int*, double*, int*, double*, int*, int*)':
/usr/include/armadillo_bits/lapack_wrapper.hpp:677: referencia a `wrapper_dgels_' sin definir
/usr/include/armadillo_bits/lapack_wrapper.hpp:677: referencia a `wrapper_dgels_' sin definir
collect2: error: ld returned 1 exit status
make: *** [Prueba] Error 1
makefile:45: recipe for target 'Prueba' failed
16:17:19 Build Finished (took 16s.942ms)
El problema esta en la siguiente linea de codigo:
std::cout << solve(A,b) << '\n';
donde A es una matriz y b es un vector.
No reconoce la funcion solve(), pero cuando corro el codigo en consola funciona correctamente, pero no en eclipse no compila. Sera que sabes resolver ese error?
Ya lo resolvi creo que falta un paso, es agregar armadillo a GCC C++ Linker en la pestaña Libraries :) Muchas gracias por todo
EliminarMuchas gracias por compartir tu solución. Curiosamente en mi PC no fue necesario ese paso extra. Quizás sea por la versión de Linux (yo uso Linux Mint 17.3), aunque no puedo asegurar que esa sea la razón.
EliminarJormar Turizo, estoy corriendo un programa en eclipse con armadillo y no me corre pero sí en la terminal. Agregué la /usr/include/armadillo_bits al linker de c++.
Eliminar¿¿ Hiciste algo más para que te corriera ??
de antemano, gracias.
La respuesta era agregar la palabra "armadillo" en el linker libraries (-l), sin las comillas.
EliminarEs curioso, no sé en qué casos es necesario añadir lo que decís. Lo he instalado un par de veces y en ningún caso tuve que añadir "armadillo" al linker. Quizás tiene que ver con alguna variable de entorno que en las últimas versiones de la librería se configure automáticamente.. Misterios de la informática
Eliminar