Proyecto multiplataforma Windows / Raspberry Pi con C++, OpenCV y Gtk

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:\msys64carpeta.

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 cmakecomando ligeramente diferente. Si ya construiste el proyecto, no dudes en borrar la buildcarpeta 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\bincarpeta. Agréguelo a la PATHvariable 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

  1. Instale una versión binaria de Windows de Code::Blocks desde el sitio oficial: http://www.codeblocks.org/downloads .
  2. Entre todas las versiones, elija la configuración normal (ya instaló la string de herramientas mingw en el paso anterior).
  3. Instálelo con todas las opciones predeterminadas.
  4. 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 codebcarpeta que acaba de crear y el rascam.cbparchivo del proyecto que contiene (tenga en cuenta que el nombre del proyecto es el mismo que se especifica en CMakeLists.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 rascappdestino.
  • 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 DepurarVentanas 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ónCompilador…
  • 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 AjustesDepurador…

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 .

Publicación traducida automáticamente

Artículo escrito por jmgonet y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *