Кросс-платформенный проект Windows / Raspberry Pi с C ++, OpenCV и Gtk

Опубликовано: 8 Июля, 2021

Вступление

Эта статья принадлежит к серии статей о написании, построении и отладке приложения, написанного на C ++ , которое использует библиотеку Gtk для обработки пользовательского интерфейса, библиотеку OpenCV для захвата и обработки изображений с камеры, совместимую с основными платформами, Mac OS X , Linux и Windows и, в конечном итоге, работает на Raspberry Pi .

Основная статья этой серии находится здесь:

  • Полноэкранное приложение OpenCV / GtK на C ++, работающее на Raspberry PI.

В этой статье обсуждается, как настроить Windows для получения источников, сборки и отладки такого проекта. Исходники проекта доступны здесь:

  • https://github.com/cpp-tutorial/raspberry-cpp-gtk-opencv

Установить M2SYS

В Windows нет стандартных системных расположений для библиотек, как в Linux и Mac OS X. Следовательно, чтобы получить библиотеки Gtk и OpenCV , вам нужно использовать некоторую нестандартную процедуру, которая включает в себя установку специального диспетчера пакетов под названием pacman и специальной Linux-подобной среды разработки под названием MinGW .

Самый простой способ получить pacman и MinGW - использовать проект с открытым исходным кодом под названием MSYS2 . Перейдите на домашнюю страницу MSYS2 и загрузите установщик M2SYS, который лучше всего соответствует вашей системе (возможно, 64-разрядный, поскольку i686 на самом деле 32-битный).

Установите его со всеми параметрами по умолчанию в папку C:msys64

После установки у вас будет:

  • Среда MSYS2 MSYS , где вы можете использовать pacman для установки компонентов.
  • 64-разрядная среда MSYS2 MinGW, что означает Minimal GNU for Windows , где вы можете использовать все инструменты и библиотеки, установленные через pacman .
  • Вы также получаете MSYS2 MinGW32 для доступа к 32-битным инструментам; вам не следует устанавливать их, если ваша система 64-битная.

Как объясняется в инструкциях по загрузке, первое, что нужно сделать, - это обновить базу данных пакетов. Откройте MSYS2 MSYS и введите следующую команду:

$ pacman -Syuu

Если вы столкнетесь с приведенным ниже сообщением, закройте окно MSYS2 MSYS с помощью мыши, откройте его снова и выполните ту же команду, пока она не завершится нормально.

предупреждение: завершите MSYS2 без возврата в оболочку и снова проверьте наличие обновлений
предупреждение: например, закройте окно терминала вместо вызова exit

Если вы ищете конкретный пакет, вы можете использовать команду, подобную следующей. Предполагая, что вы ищете CMake :

$ pacman -Ss cmake

Создайте отличный Linux-подобный инструментарий

Вдохновленный идеей Алексея Павлова, я советую установить следующие пакеты и инструменты, чтобы у вас была среда разработки, очень похожая на ту, что присутствует на машинах Linux. С его помощью вы можете компилировать приложения для Windows с помощью инструментов 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 распаковать 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

После загрузки и установки всех этих пакетов вы можете проверить, присутствуют ли они для тестирования некоторых из них. Для этого откройте 64-битную среду MSYS2 MingGW и проверьте несколько команд:

$ git --version
$ make --version
$ cmake --version
$ gcc --version
$ pkg-config --version

Смотрите также:

  • Установка GCC и MYSYS2.
  • Создайте отличный Linux-подобный инструментарий.

Установка Gtk и OpenCV

Вы можете установить библиотеки Gtk и OpenCV с помощью pacman в MSYS2 MSYS с помощью следующих команд:

$ pacman -S mingw64 / mingw-w64-x86_64-gtkmm3
$ pacman -S mingw64 / mingw-w64-x86_64-opencv

Сборка с MinGW64

Чтобы собрать проект, откройте 64-разрядную версию MSYS2 MinGW , найдите соответствующую папку (накопители сопоставлены с корневой папкой, например C:UsersmeDocumentDevelopment будет /c/Users/me/Development ):

$ cd перейти / в / ваш / проект / папку
$ git clone https://github.com/cpp-tutorial/raspberry-cpp-gtk-opencv.git
$ cd малина-cpp-gtk-opencv
сборка $ mkdir
$ cd build
$ cmake -G "Makefiles Unix" ../src/
$ make
$ ./racapp.exe

Если вы хотите отлаживать с помощью gdb , вы можете использовать немного другую команду cmake Если вы уже собрали проект, без колебаний удалите build и создайте ее снова:

$ cd ..
$ rm -rf build
сборка $ mkdir
$ cd build
$ cmake -G "Файлы сборки Unix" -DCMAKE_BUILD_TYPE = Отладка ../src
$ make
$ gdb ./rascapp.exe

После этого вы в GDB . Чтобы сориентироваться, посмотрите инструкции по Linux.

Сделать инструменты MinGW доступными повсюду

По умолчанию MSYS2 устанавливает библиотеки и инструменты в папку C:Msys2MinGW64in Добавьте его в PATH среды PATH, чтобы все приложения могли найти инструменты:

Когда вы закончите, вы можете открыть командную строку Windows и проверить, доступны ли в ней те же инструменты:

$ pkg-config --version
$ pkg-config gtkmm-3.0 --cflags --libs
$ pkg-config opencv-3.0 --cflags --libs

Этот шаг не является строго необходимым, если вы собираетесь использовать Code :: Blocks , но это тоже не повредит.

Установка Code :: Blocks в Windows и настройка инструментария MSYS2

IDE по умолчанию в Windows - Visual Studio . Однако Visual Studio ожидает специального формата для отладки символов, отличного от формата, создаваемого gcc и g ++ в MinGW . В кроссплатформенном проекте, если вы не хотите делать свою жизнь невыносимой из-за сверхсложных процедур установки, лучше об этом не говорить.

Я выбрал Code :: Blocks, потому что:

  • Он существует на всех трех основных платформах, поэтому вы можете использовать его везде, включая Raspberry Pi , с аналогичной конфигурацией.
  • Он довольно популярен, так что вы можете поискать инструкции и поддержку сообщества.
  • У него есть мастер установки Windows, который позаботится обо всех деталях конфигурации.

Процедура установки совершенно проста, по крайней мере, в Windows 10.

  1. Установите двоичную версию Code :: Blocks для Windows с официального сайта: http://www.codeblocks.org/downloads.
  2. Среди всех версий выберите обычную настройку (вы уже установили набор инструментов mingw на предыдущем шаге).
  3. Установите его со всеми параметрами по умолчанию.
  4. Запустить приложение

Если сообщений об ошибках нет, все готово. В противном случае посмотрите поиск неисправностей.

Создание с помощью Code :: Blocks

Самый простой способ - использовать CMake для подготовки для вас проекта Code :: Blocks. Предполагая, что вы уже клонировали проект в известном месте, и ваш 64-битный терминал MSYS2 MinGW уже там, это последовательность команд:

$ mkdir codeb
$ cd codeb
$ cmake -DCMAKE_BUILD_TYPE = Debug -G "CodeBlocks - Unix Makefiles" ../src/

Следуйте остальной процедуре из Code :: Blocks :

  • В меню Файл → Открыть… codeb которую вы только что создали, и rascam.cbp проекта rascam.cbp в ней (обратите внимание, что имя проекта такое же, как указано в CMakeLists.txt ).
  • Если хотите, перейдите в « Проект» → « Дерево проекта» и измените « Отображать папки как на диске» и « Скрыть имя папки» .
  • Выберите один из исходных файлов и поместите на нем точку останова, щелкнув серую область.
  • На панели инструментов выберите цель rascapp
  • На панели инструментов запустите отладчик.
  • Он должен запуститься и остановиться в точке останова.
  • Чтобы увидеть переменные, перейдите в DebugDebugging windowsWatches .

Поиск проблемы

недействительный или поврежденный пакет (подпись PGP)

Иногда вы можете встретить следующее сообщение об ошибке при загрузке, обновлении или обновлении с помощью pacman :

(4/4) проверка целостности пакета [########################################################################## ##########################] 100%
ошибка: jsoncpp: подпись от "Алексея Павлова (Alexpux)" 
является недействительным
:: Файл /var/cache/pacman/pkg/jsoncpp-1.8.4-1-any.pkg.tar.xz - это 
поврежден (недействительный или поврежденный пакет (подпись PGP)).

Это временная проблема, связанная с недоступностью создания веб-сайтов, и вы можете решить ее, просто подождав (см. Обсуждение проблем с подписями от «Alexey Pavlov (Alexpux)»). Кроме того, вы можете отключить проверку подписи, отредактировав /etc/pacman.conf (используйте Vim из MinGW64 ) и изменив следующую запись:

SigLevel = Никогда

Code :: Blocks не может найти компилятор

При запуске Code :: Blocks может пожаловаться, что не находит набор инструментов компилятора. Если вы установили его с MSYS2, как описано выше, это просто вопрос конфигурации:

  • При запуске просто примите диалоговое окно, в котором вам нужно выбрать существующую цепочку инструментов.
  • В главном меню откройте НастройкиКомпилятор…
  • В диалоговом окне найдите раздел « Глобальные настройки компилятора » и вкладку « Исполняемые файлы Toolchain».
  • Убедитесь, что путь правильный. Если вы установили MSYS2 с параметрами по умолчанию, это должен быть C:msys64mingw64 .
  • Также убедитесь, что все упомянутые программные файлы соответствуют существующим исполняемым файлам в этой папке.
  • Примите все, и сделайте то же самое с НастройкиОтладчик…

Примечание. У меня возникла эта проблема, когда я установил Code :: Blocks с помощью mingw-setup . Я предполагаю, что он ожидает стандартной установки MinGW , а не MSYS2 .

Code :: Blocks не может сохранять конфигурацию

При закрытии приложения или при сохранении всех данных Code :: Blocks может пожаловаться, что не может сохранить конфигурацию, и отобразить сообщение об ошибке. Чтобы решить эту проблему:

  • Обратите внимание на путь, по которому он пытается сохранить файл конфигурации.
  • Создайте такой же путь и пустой файл с тем же именем.
  • Сделайте этот файл доступным для записи.

Примечание. У меня возникла эта проблема, когда я установил Code :: Blocks с помощью mingw-setup . Я предполагаю, что он ожидает стандартной установки MinGW , а не MSYS2 .

Хотите узнать больше о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровней C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++