编译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成功开发一个图形界面程序的更多相关文章

  1. 2018-09-28 用Python3和tkinter开发简单图形界面程序

    源码库: program-in-chinese/wubi_code_editor 起因在这里. 由于此项目和汉字相关, 个人也想尝试Python的图形界面开发, 于是开始尝试. 遇到的一个坑. 用户测 ...

  2. Delphi - 让Delphi10.2在Windows下开发的图形界面程序运行在64位Linux中!

    FmxLinux官网:https://fmxlinux.com/ 参考: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Linux_Applica ...

  3. 从零开始在ubuntu上配置深度学习开发环境

    从零开始在ubuntu上配置深度学习开发环境 昨天一不小心把原来配置好的台式机的开发环境破坏了,调了半天没有调回来,索性就重装一次ubuntu系统.这篇文章主要记录一个简单的.‘傻瓜式’教程. 一.U ...

  4. 如何用原生js开发一个Chrome扩展程序

    原文地址:How to Build a Simple Chrome Extension in Vanilla JavaScript 开发一个Chrome扩展程序非常简单,只需要使用原生的js就可以完成 ...

  5. Android(java)学习笔记219:开发一个多界面的应用程序之两种意图

    1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...

  6. 如何快速地开发一个微信小程序

    如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...

  7. Android(java)学习笔记162:开发一个多界面的应用程序之两种意图

    1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...

  8. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  9. 使用开源工具MonoDevelop开发GTK#图形界面

    转自:http://developer.51cto.com/art/201011/235040.htm Mono一直到现在的2.8已经完全可以胜任一些比较小的项目了,但相关的开发文档与教程一直比较匮乏 ...

随机推荐

  1. springmvc笔记(基本配置,核心文件,路径,参数,文件上传,json整合)

    首先导入jar包 大家注意一下我的springmvc,jackson,common-up的jar包版本.其他版本有可能出现不兼容. src文件: webroot目录: web.xml <?xml ...

  2. [kuangbin带你飞]专题一 简单搜索

            ID Origin Title 454 / 1008 Problem A POJ 1321 棋盘问题   328 / 854 Problem B POJ 2251 Dungeon Ma ...

  3. C Primer Plus(第五版)10

    第 10 章 数组和指针 在本章中你将学习下列内容: · 关键字: static (静态) · 运算符: & * (一元) · 创建与初始化数组的方法. · 指针(基于已学的基础知识)及指针和 ...

  4. HYSBZ 1061 志愿者招募 【最小费用流】【差分】【最小费用流模板】

    #include<stdio.h> #include<queue> #define MAXN 1003 #define MAXM 10002*4 #define INF 100 ...

  5. 502 Bad Gateway什么意思

    http://baike.baidu.com/link?url=U2ijg5T5PG_tTkY67mqfx07co7qGqvMB32rbLwq4S2ThBSRIWWvU76Y0Mb8Z3z6nbViN ...

  6. maven配置开发

    1.项目中使用Log4j对其日志进行配置管理,采取的方式一种是通过properties文件设置,另一种方式就是通过设置xml文件的配置. 使用场景: 编程模型:log.err();log.debug( ...

  7. 解决:对 PInvoke 函数的调用导致堆栈不对称问题 <转载>

    问题描述: 在使用托管代码调用非托管代码时,发生“对 PInvoke 函数“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::Ge ...

  8. Creating Icon Overlay Handlers / 创建图标标记 Handlers (翻译自MSDN) / VC++, Windows, DLL, ATL, COM

    创建图标标记 Handlers Creating Icon Overlay Handlers 图标标记是放在代表着某个 Shell 对象的图标之左下角的小图像.它们通常被加在一个对象的图标的身上来提供 ...

  9. 消费者端的Spring JMS 连接ActiveMQ接收生产者Oozie Server发送的Oozie作业执行结果

    一,介绍 Oozie是一个Hadoop工作流服务器,接收Client提交的作业(MapReduce作业)请求,并把该作业提交给MapReduce执行.同时,Oozie还可以实现消息通知功能,只要配置好 ...

  10. 华为OJ平台——将真分数分解为埃及分数

    题目描述: 分子为1的分数称为埃及分数.现输入一个真分数(分子比分母小的分数,叫做真分数),请将该分数分解为埃及分数.如:8/11 = 1/2+1/5+1/55+1/110. 输入: 输入一个真分数, ...