在ubuntu上使用wxWidgets成功开发一个图形界面程序

编译wxWidgets

下载最新版的源码,wxWidgets-3.0.2。wxWidgets在liunx是通过wxGTK实现的。wxGTK和wxWidgets的源码打包在一起。wxGTK依赖GTK+,当前版本依赖高于2.8.2的版本。我安装了3.0版本的GTK+。apt-get install gtk+-3.0-dev。一般开发用的库,都有个-dev结尾,这是个约定。开发用的库包含了头文件和文档之类的东西。

为了让不同平台wxWidgets编译之后放到各自的文件夹下,先在解压得到的文件夹下创建一目录。
mkdir gtk-build,release编译。mkdir gtkd-build,debug编译。

进入gtkd-build。执行下面的配置指令。

../configure --with-gtk=3 --enable-unicode --disable-shared --enable-debug

执行过程中会检查编译环境是否符合要求。就是各种编译软件,各种依赖库是否都具备。检查的过程中有提示,失败了的地方就说明确依赖软件。直接apt-get安装就好了。当配置成功之后,执行一下make指令。就能完成编译。

../configure 的各种参数doc文件夹下的install.txt都有说明。编译时根据需求打开和关闭一些功能将会省不是事情。

因为系统中已经安装了wxWidgets,所以不能make install,如果编译成动态版本的会导致冲突。

编写第一个程序

使用codeblocks按照向导很容易就创建了wxWidgets工程。记住,设计器选择wxSmith。这个和codeblocks是集成的。我选择的是dialogbased的应用程序。
然后开始编辑工程得编译选项。
这个是最绕脑的。花我的时间最长。不熟悉linux图形界面程序开发的基础概念
,熟的人也不多,网络上也缺少参考资料。连英文的资料都少,更何况中文的。

首先把wxWidgets的依赖添加到 Linker settings->link libraries。分别是libwx_gtk3u_core-3.0.a、libwx_baseu-3.0.a、libwx_baseu_net-3.0.a、libwx_baseu_xml-3.0.a。因为默认的程序用的都是基本的界面空间,就这几个就可以了。

解决编译错误

编译,操,一大堆错误。让人望而却步,windows这样一搞就直接编译通过了。因为windows没有这样的依赖关系wxWidgets->wxGTK+->GTK+->GTK->X11。

第一个错误,No Target! You should use wx-config program for compilation flags!。网上一搜,就一个结果。上面的方法根本就不解决问题。双击这个错误行,发现是代码通过预处理指令抛出来的。看看代码上下文,原来世需要定义一个常量,表示wxWidgets下层依赖的是什么。那就加上 __WXGTK__和__WXGTK3__;再编译,这个错误没有了。其他的都是各种找不到的错误。就是还需要添加依赖。

首先是GTK+3.0。在其他选项上再加上"pkg-config --libs gtk+-3.0",我操不行。搜啊搜啊,发现有人提到,gcc输入库的顺序要按依赖顺序排。查看编译时的命令行参数,"pkg-config --libs gtk+-3.0"执行出来的结果放在wxWidgets和wxGTK前面。没办法之后再控制台执行一下pkg-config --libs gtk+-3.0。把得到结果一个个手动添加到依赖。

然后是X11,X11幸好只要这一个项目。直接添加到依赖。再编译还有错误,undefined reference to symbol ‘[email protected]@GLIBC_2.2.5‘。这个在pthread里面,把libpthread添加到依赖。这些东西apt-get install build-essential的时候都有了,只要知道了名字,直接加入依赖就可以了。X11是linux下x windows环境图形界面程序都需要依赖的东西,要是用directfb就不用X11了。

接下来是各种编解码图像的找不到,先到wxWidgets下面找找有没有,有的话就加进去。没有的话就是用系统提供的。

还有undefined reference to symbol ‘deflate‘。上网搜这是zlib压缩和解压缩库里的东西。把libz加进入到依赖。

undefined reference to symbol ‘[email protected]@GLIBC_2.2.5‘。这玩意是加载动态连接库的dl库找不到。把dl加入到依赖。

最后就是这三个。
undefined reference to `SmcOpenConnection‘
undefined reference to `SmcVendor‘
undefined reference to `SmcCloseConnection‘

到网上搜索,一个结果都没有。没办法直接看源码。看看从那个头文件导入的这些东西。然后是用头文件名和头文件给出的信息搜索一下。发现这个东西是X11用来管理会话的库中的。最后找到这个库的名字叫SM,加入依赖。

终于能够编译通过了。

开源的东西,都有这个特点,大家你贡献一点,我贡献一点。要想不重复发明轮子,就得从这找到,从那儿找需要的东西然后集合起来。

时间: 2024-10-31 11:03:41

在ubuntu上使用wxWidgets成功开发一个图形界面程序的相关文章

【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关

上篇"[物联网(IoT)开发]Arduino 入门 Hello World(LED闪烁)"只是通过将一段程序烧录到Arduino开发板上控制LEC闪烁,没有任何连网动作,也就是说断开网络提供电源依然还可以工作.本文将介绍如何开发一个应用程序,以便使用适用于物联网 (Internet of Things, IoT) 的技术.我们的应用程序通过串口收集数据,将其存储在一个 Web 服务器上,然后在网页上实时显式结果,并可以在网页上控制LED的开关. 构建一个类似的应用程序的前提条件 对于第

Java swing五子棋源码及实现之Java 开发图形界面程序五子棋的实现方式

今天给大家介绍一下如何用Java swing实现五子棋的开发即用Java开发图形界面程序五子棋,代码由于太多,只贴部分,最下面会附上下载地址,废话不多说,下面我们先看一下运行结果: 接下来我们看代码: 首先是创建主frame框架界面: package org.liky.game.frame; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import

用Nim语言开发windows GUI图形界面程序

前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于QQ群:“Nim开发集中营”469329878: 感兴趣的朋友,可以加这个群一起讨论 配置GUI开发环境 我在这篇博客中,写到了Nim开发环境的搭建 那篇博客中说MingW是必选的, 这对于开发一个普通的Nim程序来说,没有问题,但要开发GUI程序,还不够 官方安装包中所包含的的MingW安装包有点问题 如果你用编译命令:--app:

ubuntu 14修改启动模式 关闭启动图形界面

Ubuntu的默认开机的runlevel是2,可以用runlevel来查看当前的默认运行级别. runlevel级别定义如下: 0 – Halt,关机模式 1 – Single,单用户模式 2 - Full multi-user with display manager (GUI) 3 - Full multi-user with display manager (GUI) 4 - Full multi-user with display manager (GUI) 5 - Full multi

使用virtualenv在ubuntu上搭建python 3开发环境

ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要用到virtualenv了. virtualenv的官网在http://www.virtualenv.org/en/latest/.如其官方所说,virtualenv 是一个创建独立python环境的工具.其要解决的最基本问题就是库的依赖和版本,以及间接权限(indirectly permision

【转】使用virtualenv在ubuntu上搭建python 3开发环境

ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要用到virtualenv了. virtualenv的官网在http://www.virtualenv.org/en/latest/.如其官方所说,virtualenv 是一个创建独立python环境的工具.其要解决的最基本问题就是库的依赖和版本,以及间接权限(indirectly permision

Ubuntu下用glade和GTK+开发C语言界面程序(一)

前言:对于大学中计算机系的每年暑假的课设有太多想说的,能从中学到很多东西,当然不排除打酱油的,这些可以掠过哦,凡事都打酱油,人生也是打酱油的吧.2333. 对于大三以前的课设一般的要求都是用C写的,即使你学的面向对象很好,也只能老老实实的来用C写.当然这其中还有好多要说道的东西. 用C写,面对windows下的那不能再吐槽的cmd终端,我就不说太多了,因为已经很少到windows上做东西.用C写,又想写的高大上一点,当然要有图形界面了,在linux上用C写界面程序,GTK+是少不了的,但是运用面

开发一个微笑小程序示例

一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开发与管理->配置服务器中,点击“开发者设置”.3.会获得一个AppID,记录AppID,后面创建项目时会用到. 注意:如果要以非管理员微信号在手机上体验该小程序,那么我们还需要操作“绑定开发者”.即在“用户身份”-“开发者”模块,绑定上需要体验该小程序的微信号.本教程默认注册帐号.体验都是使用管理员微信

ubuntu上tomcat 启动成功但访问不了

vi /etc/sysconfig/iptables加入你要访问的端口号 -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -A INPUT -m st