本文属于一系列有关编写,构建和调试用C++编写的应用程序的文章,该应用程序使用Gtk库处理用户界面,使用OpenCV库捕获和处理来自相机的图像,并与主要平台Mac OS X兼容, Linux和Windows ,并最终在Raspberry Pi上运行。
该系列的主要文章在这里:
- 在Raspberry PI上运行的C++中的全屏OpenCV / GtK应用程序。
本文讨论了如何配置Windows来检索源,构建和调试这样的项目。该项目的来源可在此处获得:
- https://github.com/cpp-tutorial/raspberry-cpp-gtk-opencv
Windows没有像Linux和Mac OS X那样具有标准的库系统位置。因此,要获取Gtk和OpenCV库,您需要使用一些非标准过程,包括安装一个名为pacman的特殊程序包管理器和一个名为MinGW的类似于Linux的特殊开发环境。
获得pacman和MinGW的最简单方法是通过一个名为MSYS2的开源项目。转到MSYS2主页并下载最适合您的系统的M2SYS安装程序(可能是64位,因为i686实际上是32位)。
使用所有默认选项将其安装在C:\msys64
文件夹中。
安装后,您将拥有:
- MSYS2 MSYS环境,您可以在其中使用pacman安装组件。
- MSYS2 MinGW 64位环境代表Windows的Minimal GNU ,您可以在其中使用通过pacman安装的所有工具和库。
- 您还可以获得MSYS2 MinGW32 ,以访问32位工具;如果您的系统是64位,则不应安装其中的任何一个。
如下载说明中所述,首先要做的是升级软件包数据库。打开MSYS2 MSYS并键入以下命令:
$ pacman -Syuu
如果您遇到以下消息,请用鼠标关闭MSYS2 MSYS窗口,再次将其打开,然后运行相同的命令,直到其正常终止。
warning: terminate MSYS2 without returning to shell and check for updates again
warning: for example close your terminal window instead of calling exit
如果您要查找特定的软件包,则可以使用类似于以下内容的命令。假设您正在寻找CMake :
$ pacman -Ss cmake
构建一个很棒的类似Linux的工具包
受阿列克谢·帕夫洛夫(Alexey Pavlov)的启发,我建议安装以下软件包和工具,以便您拥有与Linux计算机中非常相似的开发环境。使用它,您可以使用Linux工具来编译Windows的应用程序:
$ 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
在下载并安装所有这些软件包之后,您可以验证它们是否存在以对其中一些进行测试。为此,请打开MSYS2 MingGW 64位环境,并测试一些命令:
$ git --version
$ make --version
$ cmake --version
$ gcc --version
$ pkg-config --version
也可以看看:
- 安装GCC和MYSYS2。
- 构建一个很棒的类似于Linux的工具包。
安装Gtk和OpenCV
您可以在MSYS2 MSYS中使用pacman安装Gtk和OpenCV库,并使用以下命令:
$ pacman -S mingw64/mingw-w64-x86_64-gtkmm3
$ pacman -S mingw64/mingw-w64-x86_64-opencv
用MinGW64构建
要构建项目,请打开64位MSYS2 MinGW ,找到一个适当的文件夹(驱动器单元已映射到根文件夹,例如C:\Users\me\Document\Development\
将为/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
如果要使用gdb进行调试,可以使用稍有不同的cmake
命令。如果您已经构建了项目,请不要犹豫删除build
文件夹并再次创建它:
$ cd ..
$ rm -rf build
$ mkdir build
$ cd build
$ cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ../src
$ make
$ gdb ./rascapp.exe
之后,您进入gdb 。要找到自己的方式,请查看Linux说明。
使MinGW工具随处可用
默认情况下, MSYS2将库和工具安装在C:\Msys2\MinGW64\bin
文件夹中。将其添加到PATH
环境变量中,以便所有应用程序都可以找到以下工具:
完成后,您可以打开Windows命令行,并验证是否可以使用相同的工具:
$ pkg-config --version
$ pkg-config gtkmm-3.0 --cflags --libs
$ pkg-config opencv-3.0 --cflags --libs
如果您要使用Code :: Blocks ,则此步骤并非绝对必要,但也不会造成伤害。
在Windows中安装Code :: Blocks并配置MSYS2工具链
Windows中的默认IDE是Visual Studio 。但是, Visual Studio需要一种用于调试符号的特殊格式,这不是MinGW中gcc和g ++生成的格式。在跨平台项目中,如果您不想按照极其复杂的安装过程来度过痛苦的生活,最好不加选择。
我选择Code :: Blocks是因为:
- 它存在于所有三个主要平台中,因此您可以在任何地方使用它,包括具有类似配置的Raspberry Pi。
- 它非常受欢迎,因此您可以查找说明和社区支持。
- 它具有Windows安装向导,该向导负责所有配置详细信息。
至少在Windows 10中,安装过程是完全简单的
- 从官方站点http://www.codeblocks.org/downloads安装Windows二进制版本的Code :: Blocks。
- 在所有版本中,选择常规设置(您已经在上一步中安装了mingw工具链)。
- 使用所有默认选项进行安装。
- 启动程序
如果没有错误消息,那么您就完成了。否则,请查看故障排除。
用Code :: Blocks构建
最简单的方法是使用CMake为您准备一个Code :: Blocks项目。假设您已经在已知位置克隆了项目,并且您的MSYS2 MinGW 64位终端已经存在,那么这是命令序列:
$ mkdir codeb
$ cd codeb
$ cmake -DCMAKE_BUILD_TYPE=Debug -G"CodeBlocks - Unix Makefiles" ../src/
请按照以下代码中的其余步骤进行操作: Code :: Blocks :
- 从菜单中文件→打开…,寻找
codeb
文件夹您刚刚创建,并为rascam.cbp
在它的项目文件(注意,该项目的名称是在指定的相同CMakeLists.txt
)。 - 如果愿意,请转到项目→项目树,然后修改显示磁盘上的文件夹和隐藏文件夹名称。
- 选择一个源文件,并通过单击灰色区域在其上放置一个断点。
- 在工具栏中,选择
rascapp
目标。 - 在工具栏中,启动调试器。
- 它应该启动,然后在断点处停止。
- 要查看变量,请转到调试→调试窗口→手表。
故障排除
无效或损坏的软件包(PGP签名)
有时,使用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)).
这是与创作网站不可用相关的暂时性问题,您可以通过等待解决此问题(请参阅“ Alexey Pavlov(Alexpux)”中有关签名问题的讨论)。另外,您可以通过编辑/etc/pacman.conf
(使用MinGW64的Vim )并更改以下条目来停用签名检查:
SigLevel = Never
代码::块找不到编译器
在启动时, Code :: Blocks可能会抱怨找不到编译器工具链。如果您如上所述将其与MSYS2一起安装,则只需进行配置即可:
- 在启动时,只需接受要求您选择现有工具链的对话框。
- 在主菜单中,打开“设置” →“编译器…”。
- 在对话框中,找到“全局编译器设置”部分和“工具链可执行文件”选项卡。
- 确保路径正确。如果使用默认选项安装了MSYS2 ,则该目录应为
C:\msys64\mingw64
。 - 还要确保所有提到的程序文件都与该文件夹中的现有可执行文件相对应。
- 接受所有内容,并使用“设置” →“调试器”进行相同的操作…
注意:使用mingw-setup安装Code :: Blocks时遇到了这个问题。我猜它期望安装标准的MinGW ,而不是MSYS2 。
代码::块无法保存配置
关闭应用程序或保存所有数据时, Code :: Blocks可能会抱怨它无法保存配置,并显示错误消息。要解决这个问题:
- 记下尝试保存配置文件的路径。
- 创建相同的路径,并创建一个具有相同名称的空文件。
- 使该文件可写。
注意:使用mingw-setup安装Code :: Blocks时遇到了这个问题。我猜它期望安装标准的MinGW ,而不是MSYS2 。