在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 'pthread_mutexattr_settype@@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 'dlclose@@GLIBC_2.2.5'。这玩意是加载动态连接库的dl库找不到。把dl加入到依赖。
最后就是这三个。
undefined reference to `SmcOpenConnection'
undefined reference to `SmcVendor'
undefined reference to `SmcCloseConnection'
到网上搜索,一个结果都没有。没办法直接看源码。看看从那个头文件导入的这些东西。然后是用头文件名和头文件给出的信息搜索一下。发现这个东西是X11用来管理会话的库中的。最后找到这个库的名字叫SM,加入依赖。
终于能够编译通过了。
开源的东西,都有这个特点,大家你贡献一点,我贡献一点。要想不重复发明轮子,就得从这找到,从那儿找需要的东西然后集合起来。
在ubuntu上使用wxWidgets成功开发一个图形界面程序的更多相关文章
- 2018-09-28 用Python3和tkinter开发简单图形界面程序
源码库: program-in-chinese/wubi_code_editor 起因在这里. 由于此项目和汉字相关, 个人也想尝试Python的图形界面开发, 于是开始尝试. 遇到的一个坑. 用户测 ...
- Delphi - 让Delphi10.2在Windows下开发的图形界面程序运行在64位Linux中!
FmxLinux官网:https://fmxlinux.com/ 参考: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Linux_Applica ...
- 从零开始在ubuntu上配置深度学习开发环境
从零开始在ubuntu上配置深度学习开发环境 昨天一不小心把原来配置好的台式机的开发环境破坏了,调了半天没有调回来,索性就重装一次ubuntu系统.这篇文章主要记录一个简单的.‘傻瓜式’教程. 一.U ...
- 如何用原生js开发一个Chrome扩展程序
原文地址:How to Build a Simple Chrome Extension in Vanilla JavaScript 开发一个Chrome扩展程序非常简单,只需要使用原生的js就可以完成 ...
- Android(java)学习笔记219:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
- Android(java)学习笔记162:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- 在桌面Linux环境下开发图形界面程序的方案对比
在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...
- 使用开源工具MonoDevelop开发GTK#图形界面
转自:http://developer.51cto.com/art/201011/235040.htm Mono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏 ...
随机推荐
- 使用JavaScript实现新闻滚动效果
最近要实现一个滚动新闻效果,在网上查了一些资料,发现基本的实现方法有两种: 使用Marquee标签.这个标签的使用我已经转载了一篇比较详细的文章,这个标签的优点是便于使用,缺点是人们已经逐渐不适用它了 ...
- 最简的Dubbo例子部署
dubbo 中包含下面4个核心组件: 生产者.消费者.注册中心.监控中心. 简单部署的模块关系 生产者.消费者 最简版本的Dubbo部署只运行Demo Provider和Demo Consumer ...
- 用JSON方式回调服务器
<script language="javascript"> $(function(){ $.getJSON('http://xxx/system/ecmall_ins ...
- [HDU 2126] Buy the souvenirs (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意:给你n个物品,m元钱,问你最多能买个多少物品,并且有多少种解决方案. 一开始想到的是,先解 ...
- Android 媒体键监听以及模拟媒体键盘的实现 demo
有时我们需要程序模拟按钮或点击,而手机本身又没有,哪么可以采取其它方式 模拟实现,最后再去实际设备去测试(前期一般都拿不到设备): 如上一首,下一首,暂停等,手机上是没有的,但有些设备上是有的,所以我 ...
- python-appium手机自动化测试(仅需安装包)前期准备(pydev-eclipse编辑器)
1.jdk安装与环境变量配置教程http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 我本机安装的是1.6.043 2.sdk下 ...
- IIS装好了无法访问localhost
解决办法: [1]: 检查你的DTC服务(全名:Distributed Transaction Coordinator)是否可以正常启动 ...
- 跟我学 NHibernate (二)
1. 在 NHibernate 中使用事务, 主要代码如下: #region 事务 public IList<Customer> GetAll() { // 开启事物 using (ITr ...
- 酒鬼-DP
Description Santo刚刚与房东打赌赢得了一间在New Clondike 的大客厅.今天,他来到这个大客厅欣赏他的奖品.房东摆出了一行瓶子在酒吧上.瓶子里都装有不同体积的酒.令Santo高 ...
- Linux下软件安装,卸载,管理
一. 软件安装包的类型 通常Linux应用软件的安装有五种: 1) tar+ gz包,如software-1.2.3-1.tar.gz. 他是使用UNIX系统的打包工具tar打包的. 2) r ...