[背景]

因项目需求,需要基于国产操作系统进行开发,也就是在Linux下开发GUI程序。所以有机会调查和学习几个GUI的框架。例如:QT,GTK,wxWidgets等。当然还有其他基于JS的框架,这里暂时不做考虑。

[wxWidgets简介]

wxWidgets是一个开源的跨平台C++架构库,它可以提供GUI和其他工具。支持所有版本的Windows,带GTK+或Motif的Unix和MacOS.

至于wxWidgets的优缺点,大家可以自行去了解。

本文重点是介绍基于wxWidgets源码的方式进行编译以及samples的编译。

wxWidgets官网文档:wxWidgets: Documentation

[编译环境]

  • 操作系统:

        基于开源Linux的国产操作系统 deepin 20.8 稳定版本 /  基于ubuntu的国产系统优麒麟22.04 LTS版本

  • GTK版本:

        如果系统没有安装GTK的话,需要先进行安装:sudo apt-get install libgtk-3-dev。

        安装完后,查看版本如下:

         libgtk-3-dev:amd64                            3.24.33-1ubuntu2                        amd64        development files for the GTK library

首先:需要下载源码

        两种方式:

  •   第一种方式:

        通过git命令:$ git clone --recurse-submodules https://github.com/wxWidgets/wxWidgets.git。 在国内的话,这个方式比较慢,而且容易出错,在编译的时候很有可能会报错,提示你更新某个文件夹。 

注意:如果执行没有反应的话,就直接删除那个文件夹,然后在wxWidgets目录下执行对应的命令。

  • 第二种方式:推荐这种方式下载源码,比较方便,下载后直接解压

        直接到Downloads - wxWidgets 官网的下载页面下载源码。

    

注意:大家也可以去阅读上图中右侧的Documentation 下的文档,根据自己的需要可以离线也可以在线。

源代码解压

代码下载完成后,得到一个压缩包:wxWidgets-3.2.2.1.tar.bz2。

先通过:bunzip2 wxWidgets-3.2.2.1.tar.bz2 进行解压,得到一个tar包。

再通过:tar -xvzf 进行解压,得到对应的文件夹

如下图:

编译

这里我们主要参考官方的文档来进行编译

基本步骤如下:

$ mkdir buildgtk
$ cd buildgtk
$ ../configure --with-gtk
$ make
$ sudo make install
$ sudo ldconfig
  • - 在wxWidgets目录下新建一个目录 buildgtk

  • - 进入到 buildgtk文件夹里面执行 ../configure --with-gtk

注意:这块有可能会报gtk没有找到。如果提示gtk没找到就按照上面 环境步骤那块,安装一下gtk:  sudo apt-get install libgtk-3-dev  这个包名,可能会不同。以Debian为基础的linux使用的是这个包名。在Fedora和另外一些RPM为基础的,已知的包名为:gtk3-devel.

这一步会做很多check.完成后会得到下面提示:

  • - 以上configure没问题的话,开始准备make

顺利的话,编译完成后,没有报错。

只要以上步骤没有错误,这块一般不会有问题。

如果你是通过git下载的源码,注意这块可能会报找不到一些文件,让你执行对应的git命令,执行就行了。

如果执行没有反应,进去看下该文件夹下面是否有文件,如果没有就直接删除该文件夹再去执行。

  • - 接着执行sudo make install 后

你会得到如下提示。

  • - 最后一步,执行sudo ldconfig

注意:这块有可能也什么都不提示。

编译samples

注意编译目录,后面编译其他samples的目录会不一样。

  • - 先编译一个单文件的sample

文档中没有看清楚,结果用c++来编译,发现也能编译成功,如下图:

这里需要注意的一个很重要的点是后面那两个符号,键盘左上角的那个符号,否则编译时会报错: $ c++ -o minimal minimal.cpp `wx-config --cxxflags --libs`

完成后执行结果如下:界面看起来还是不错的。

当然你执行 g++ -o minimal minimal.cpp `wx-config --cxxflags --libs` 也能得到一样的结果,如下图:

 同样的方法,没法直接编译多文件,多文件的话,需要使用的makefile文件,如下,我们进入一个多文件的sample里面

widgets

  • - 编译多文件sample

直接make能行吗?我们试一下。

 

 提示没有makefile,当然就无法编译了。

同时,如果使用 make -f makefile.unx, 也会报错,会提示你找不到 gtk/gtk.h 头文件。

去官网看看,怎么说:

 

 上面这段描述,我们就看Linux部分,而且我们是从源码,使用的configure编译的。上面提到的Makefile,是在新建的buildgtk下面的samples目录下的各个sample里面呢。

如下图:

 找到这个Makefile直接在目录下make.

编译完成后,直接得到一个可执行的文件widgets,直接运行,效果如下:

至此,大功告成,wxWidgets源码和samples也就都编译成功了。后面就继续学习其他部分。来完成跨平台的应用开发。

对于wxWidgets和QT的话,个人觉得,如果是简单一些的应用,使用wxWidgets来完成还是可以的。如果是比较复杂的,建议直接上QT。

但对于商业话这块来说,还是wxWidgets相对QT来说比较友好。

编译过程中,遇到各种问题,建议先去官网看看。对于使用Makefile文件编译多文件,英文不好,理解了好长时间加上不断的研究源代码以及编译最终还是将samples编译出来了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐