Introducción
Este artículo pertenece a una serie de artículos sobre cómo escribir, construir y depurar una aplicación escrita en C++ , que utiliza la biblioteca Gtk para manejar la interfaz de usuario, la biblioteca OpenCV para capturar y procesar imágenes de la cámara, compatible con las principales plataformas, Mac OS X , Linux y Windows y, en última instancia, ejecutándose en Raspberry Pi .
El artículo principal de la serie está aquí:
Este artículo analiza cómo configurar su Windows para recuperar fuentes, compilar y depurar un proyecto de este tipo. Las fuentes del proyecto están disponibles aquí:
Instalar M2SYS
Windows no tiene ubicaciones de sistema estándar para bibliotecas como Linux y Mac OS X. En consecuencia, para obtener las bibliotecas Gtk y OpenCV , debe utilizar un procedimiento no estándar que implica la instalación de un administrador de paquetes especial llamado pacman y un entorno de desarrollo similar a Linux llamado MinGW .
La forma más fácil de obtener pacman y MinGW es a través de un proyecto de código abierto llamado MSYS2 . Vaya a la página de inicio de MSYS2 y descargue el instalador de M2SYS que mejor corresponda a su sistema (probablemente el de 64, ya que el i686 es en realidad de 32 bits).
Instálelo con todas las opciones predeterminadas, en la C:\msys64
carpeta.
Después de la instalación tendrás:
- El entorno MSYS2 MSYS , donde puede usar pacman para instalar componentes.
- El entorno MSYS2 MinGW de 64 bits , que significa Minimal GNU para Windows , y donde puedes usar todas las herramientas y bibliotecas instaladas a través de pacman .
- También obtiene el MSYS2 MinGW32 , para acceder a herramientas de 32 bits; no debe instalar ninguno de esos si su sistema es de 64 bits.
Como se explica en las instrucciones de descarga, lo primero que debe hacer es actualizar la base de datos del paquete. Abra el MSYS2 MSYS y escriba el siguiente comando:
$ pacman -Syuu
Si encuentra el mensaje a continuación, cierre la ventana MSYS2 MSYS con el mouse, ábrala nuevamente y ejecute el mismo comando, hasta que finalice normalmente.
warning: terminate MSYS2 without returning to shell and check for updates again warning: for example close your terminal window instead of calling exit
Si está buscando un paquete en particular, puede usar un comando similar al siguiente. Suponiendo que busque CMake :
$ pacman -Ss cmake
Cree un excelente conjunto de herramientas similar a Linux
Inspirándome en la esencia de Alexey Pavlov , aconsejo instalar los siguientes paquetes y herramientas para que tenga un entorno de desarrollo muy similar al presente en las máquinas Linux . Con él puedes compilar aplicaciones para Windows usando herramientas de Linux :
$ pacman -S base base-devel net-utils git ruby wget man $ pacman -S msys/openssh msys/vim msys/bc nano msys/tmux $ pacman -S gzip zip unzip msys/p7zip tar msys/tree $ pacman -S msys/winpty msys/ed msys/pwgen msys/zsh $ pacman -S mingw64/mingw-w64-x86_64-jq $ pacman -S msys/screenfetch $ pacman -S mingw-w64-x86_64-toolchain $ pacman -S mingw64/mingw-w64-x86_64-cmake
Después de descargar e instalar todos esos paquetes, puede verificar si están presentes probando algunos. Para hacer esto, abra el entorno MSYS2 MingGW de 64 bits y pruebe algunos comandos:
$ git --version $ make --version $ cmake --version $ gcc --version $ pkg-config --version
Ver también:
Instalación de Gtk y OpenCV
Puede instalar las bibliotecas Gtk y OpenCV usando pacman en MSYS2 MSYS , con los siguientes comandos:
$ pacman -S mingw64/mingw-w64-x86_64-gtkmm3 $ pacman -S mingw64/mingw-w64-x86_64-opencv
Construyendo con MinGW64
Para compilar el proyecto, abra MSYS2 MinGW de 64 bits , busque una carpeta adecuada (las unidades de disco están asignadas a la carpeta raíz, por ejemplo C:\Users\me\Document\Development\
, serían /c/Users/me/Development
):
$ cd navigate/to/your/project/folder $ git clone https://github.com/cpp-tutorial/raspberry-cpp-gtk-opencv.git $ cd raspberry-cpp-gtk-opencv $ mkdir build $ cd build $ cmake -G"Unix Makefiles" ../src/ $ make $ ./racapp.exe
Si desea depurar con gdb , puede usar un cmake
comando ligeramente diferente. Si ya construiste el proyecto, no dudes en borrar la build
carpeta y volver a crearla:
$ cd .. $ rm -rf build $ mkdir build $ cd build $ cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ../src $ make $ gdb ./rascapp.exe
Después de eso, estás en gdb . Para encontrar su camino, busque en las instrucciones de Linux .
Hacer que las herramientas de MinGW estén disponibles en todas partes
De forma predeterminada, MSYS2 instala bibliotecas y herramientas en la C:\Msys2\MinGW64\bin
carpeta. Agréguelo a la PATH
variable de entorno, para que todas las aplicaciones puedan encontrar las herramientas:
Una vez que haya terminado, puede abrir la línea de comandos de Windows y verificar si las mismas herramientas están disponibles desde allí:
$ pkg-config --version $ pkg-config gtkmm-3.0 --cflags --libs $ pkg-config opencv-3.0 --cflags --libs
Este paso no es estrictamente necesario si vas a usar Code::Blocks , pero tampoco duele.
Instalación de Code::Blocks en Windows y configuración de la string de herramientas MSYS2
El IDE predeterminado en Windows es Visual Studio . Sin embargo, Visual Studio espera un formato especial para depurar símbolos que no es el producido por gcc y g++ en MinGW . En un proyecto multiplataforma, si no quiere amargarse la vida siguiendo procedimientos de instalación hipercomplejos, es mejor dejarlo fuera.
Elegí Código::Bloques porque:
- Existe en las tres plataformas principales, por lo que puede usarlo en todas partes, incluida Raspberry Pi , con una configuración similar.
- Es bastante popular, por lo que puede buscar instrucciones y apoyo de la comunidad.
- Tiene un asistente de instalación de Windows que se encarga de todos los detalles de configuración.
El procedimiento de instalación es completamente sencillo, al menos en Windows 10
- Instale una versión binaria de Windows de Code::Blocks desde el sitio oficial: http://www.codeblocks.org/downloads .
- Entre todas las versiones, elija la configuración normal (ya instaló la string de herramientas mingw en el paso anterior).
- Instálelo con todas las opciones predeterminadas.
- Aplicación de inicio
Si no hay mensajes de error, ya está. De lo contrario, mira la solución de problemas.
Construyendo con Code::Blocks
La ruta más fácil es usar CMake para preparar un proyecto Code::Blocks para usted. Suponiendo que ya clonó el proyecto en una ubicación conocida y que su terminal MSYS2 MinGW de 64 bits ya está allí, esta es la secuencia de comandos:
$ mkdir codeb $ cd codeb $ cmake -DCMAKE_BUILD_TYPE=Debug -G"CodeBlocks - Unix Makefiles" ../src/
Siga el resto del procedimiento desde Code::Blocks :
- En el menú, Archivo → Abrir…, busque la
codeb
carpeta que acaba de crear y elrascam.cbp
archivo del proyecto que contiene (tenga en cuenta que el nombre del proyecto es el mismo que se especifica enCMakeLists.txt
). - Si lo desea, vaya a Proyecto → Árbol de proyectos y modifique Mostrar carpetas como en disco y Ocultar nombre de carpeta .
- Seleccione uno de los archivos de origen y coloque un punto de interrupción haciendo clic en el área gris.
- En la barra de herramientas, seleccione el
rascapp
destino. - En la barra de herramientas, inicie el depurador.
- Debería iniciarse y detenerse en el punto de interrupción.
- Para ver las variables, vaya a Depurar → Ventanas de depuración → Relojes .
Solución de problemas
paquete no válido o dañado (firma PGP)
Ocasionalmente, puede encontrar el siguiente mensaje de error al descargar, actualizar o actualizar con pacman :
(4/4) checking package integrity [###################################################################] 100% error: jsoncpp: signature from "Alexey Pavlov (Alexpux) " is invalid :: File /var/cache/pacman/pkg/jsoncpp-1.8.4-1-any.pkg.tar.xz is corrupted (invalid or corrupted package (PGP signature)).
Es un problema transitorio relacionado con la indisponibilidad de los sitios web de creación, y puede resolverlo simplemente esperando (consulte una discusión sobre problemas de firma de «Alexey Pavlov (Alexpux)» ). Alternativamente, puede desactivar la verificación de firma editando /etc/pacman.conf
(use Vim de MinGW64 ) y cambiando la siguiente entrada:
SigLevel = Never
Code::Blocks no puede encontrar el compilador
Al iniciarse, Code::Blocks puede quejarse de que no encuentra la string de herramientas del compilador. Si lo ha instalado con MSYS2 como se describe anteriormente, es solo una cuestión de configuración:
- Al iniciar, simplemente acepte el cuadro de diálogo que le pide que elija una string de herramientas existente.
- En el menú principal, abra Configuración → Compilador…
- En el cuadro de diálogo, busque la sección Configuración global del compilador y la pestaña Ejecutables de Toolchain .
- Asegúrese de que la ruta sea correcta. Si instaló MSYS2 con opciones predeterminadas, debería ser
C:\msys64\mingw64
. - También asegúrese de que todos los archivos de programa mencionados correspondan a los ejecutables existentes en esa carpeta.
- Acepta todo, y haz lo mismo con Ajustes → Depurador…
Nota: Tuve este problema cuando instalé Code::Blocks con mingw-setup . Supongo que espera una instalación estándar de MinGW , y no la de MSYS2 .
Code::Blocks no puede guardar la configuración
Al cerrar la aplicación, o al guardar todos los datos, Code::Blocks puede quejarse de que no puede guardar la configuración y mostrar un mensaje de error. Para resolver esto:
- Tome nota de la ruta donde intenta guardar el archivo de configuración.
- Cree la misma ruta y un archivo vacío con el mismo nombre.
- Haga que este archivo se pueda escribir.
Nota: Tuve este problema cuando instalé Code::Blocks con mingw-setup . Supongo que espera una instalación estándar de MinGW , y no la de MSYS2 .