分类: C/C++
2011-02-17 22:23:48
多数应用软件,通常需要一个界面与使用者进行交互。典型的交互方式可以分成三种:
本书前面的一大部分内容,采用“纯文字界面”作为范例程序主要采用界面方式。此安排自然是为了避免读者一开始就陷入复杂的GUI界面设计的“泥潭”之中。然而,与大多数纯粹的C++语言教程止步于此不同,如果编写(跨平台)的“图形用户界面”,也是本书的主要教学内容。
C++的GUI程序库,同样充满很多选择。一些非开源产品多数仅限于某一平台。wxWidgets 是同时符合“开源”、“成熟”、“跨平台”,并且支持各平台“原生界面”的GUI库中的佼佼者。这里的“原生界面”是指,在A系统下,其生成的界面元素, 就和A系统的本地界面风格一致,这里的A,可以指代Windows XP、也可以指代Linux下某一图形界面。
wxWidgets的主要特点如下:
本书配套光盘提供了wxWidgets 2.8.8 版本的安装程序,以及四种编译库。您可以通过查看光盘中对应的说明文件,实现快速安装。
如果您需要更新版本的wxWidgets,或者您只是想学习其编译过程,那么请继续阅读下述内容。
2.4.1. 准备
请通过本小节末尾的“相关网站”链接,上网下载wxWidgets的最新稳定版本。请注意选择为for windows版本。
下载得到的,应是一个可执行的安装程序。与Code::Blocks的安装类似,建议将其安装某个驱动器的根目录下,比如:E:\ wxWidgets-2.8.8 目录下(尾部数字以您所使用的wxWidgets版本为准)。
当然,由于本书将指导您安装多个C++扩展库,因此,如果您愿意建立一个新文件夹,用于作为各个C++扩展库的统一的父文件夹,的确是个好主意。
2.4.2. 编译
上一步安装wxWidgets,仅得到源代码文件及一些说明。我们还需要将其中的源代码编译成“库”文件。此类“库”有很多种形式,但其实都可以称为“预编译库”。意思是:它们已经编译好了,你直接拿去用吧。
我们先简单地了解一下“动态、静态”及“调试、发行”的区别。
“库”通常包含很多功能代码,但它们本身并不能直接运行,而是准备提供给应用程序使用, “动态链接”和“静态链接”代表程序如何找到及使用库功能的两种不同方法。
“静态链接”是指,直接将库文件和程序文件合成一个大文件,在合并过程中,完成对库文件各个功能的定位。这个事情发生程序编译的过程。
“动态链接”与此相反,库文件和程序文件各自独立存在,程序在运行时,才去库文件找相关的功能。
完全使用“静态链接”,我们可能会得到一个“胖胖”的程序,直接发给用户使用就可以了。使用“动态链接”,我们可能需要分发给你的用户多个文件(程序和各个库文件)。不小心弄丢了哪个文件,用户们就要抱怨你的软件“跑”不起来了。
“调试版”和“发行版”就和链接技术无关了。前者表示,二者的区别在于:前者含有调试信息,而后者没有。有调试信息有利于我们纠出程序中的错误,不过既然它的含有额外的信息,所以这样的库肯定“胖”了不少。如果觉得错误纠得差不多了,我们就可以改用相对“苗条”的发行版。
有关“库”的详细知识,我们留在第四章讲。今天我们将把wxWidgets编译译成四种形式:
另外,wxWidgets的编译,还可以区分“UNICODE”及“非 UNICODE”两种式。在多数场合下,“UNICODE”可以对汉字及国际化有较方便的支持。因此以上四种组合,我们全部都加上相同“UNICODE” 选项。当然, “非UNICODE”选项倒也不是一无是处,以后我们也会用到。
正式开始编译之前,必须确保已经在电脑上正确安装好mingw32环境,如果您不在确信,请使用2.1.6.1小节中提及的方法进行检测。
(以下四个版本都需要编译,而不是仅编译其一。)
步骤1:打开“开始”菜单:“所有程序→附件→记事本”程序。用它打开 wxWidgets安装目录下,子目录“build\msw\”下面的“config.gcc”文件。
步骤2:找到以下内容,并确保将等号(:=)后面的值如下面加粗内容所示。另外其它未指部分的内容,请保持不变。
步骤3:请确认保存了本步的修改成果,再继续下一步。
# What type of library to build? [0,1] # Compile Unicode build of wxWidgets? [0,1] # Type of compiled binaries [debug,release] |
步骤4:SHARED 为 0表示要编译的是静态库,而不是动态库(共享库);
UNICODE为1,表示要编译成UNICODE版本,这一项在本次编译过程中始终为1。
BUILD为debug,表示要编译成含有调试信息的版本。
步骤5:打开“开始”菜单,选择“运行”,输入cmd,进入控制台窗口,然后在其内通过cd命令,切换到wxWidgets安装目录下的“build\msw”路径。比如您把wxWidgets 安装在“E:\wxWidgets-2.8.8”,则过程如下:
E: (回车)
cd wxWidgets-2.8.8 (回车)
cd build\msw (回车)
步骤6:在第3步的控制台中,继续输入以下命令:
mingw32-make.exe -f makefile.gcc (回车)
步骤7:这将开始一段长约30分钟的编译过程(视你的机器配置而定)。
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:
# What type of library to build? [0,1] # Compile Unicode build of wxWidgets? [0,1] |
其它操作方法不变。
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:
# What type of library to build? [0,1] # Type of compiled binaries [debug,release] |
其它操作方法不变。
编译过程和前一版本主要差别在于“config.gcc”文件的修改内容:
# Type of compiled binaries [debug,release] |
其它操作方法不变。
2.4.3. 结束
这是一次漫长的编译过程,至此,我们完成了四个版本的wxWidgets库的编译。它是我们编写图形用户界面基础。
为了确保大家尽量顺利地完成编译,我们在“config.gcc”仅选择了最基本的编译选项。因此 一些强大wxWidgets功能模块没有被编译成库,比如前面提到的非Unicode版,另外没有支持OpenGL、OBDC等功能。后面需要时,我们将 会加上,并且令大家放心的是,这并不会带来又一次wxWidgets漫长完全编译。
〖小提示〗:程序员,起来走走……
每次30分钟的编译过程,漫长的等待中,我猜到您不耐烦得站起来四处走动。走动其实健康有益。然而,在程序员的生涯中,我们更多面临的,可能是无数个3分钟,甚至是30秒的等待,这时,你是否记得提醒自己也要常常起来走动走动?
Code::Blocks专门提供一个插件,用于提醒程序员注意休息,很有兴趣?请在休息之后继续我们的白话之旅。
编译过程中会产生大量的中间临时文件。请进入wxWidgets文件夹内的“build”子文件 夹,搜索 “*.o”文件(确保选中“搜索子文件夹”选项):约有3千多个中间文件,全部删除,可以腾出1G多的空间。(Windows下多数编译器会生产扩展名为 “.obj”的文件,但mingw32-g++产生的为“.o”文件。)
编译完成后,所有静态链接库位于wxWidgets安装目录下的“lib\gcc_lib”子目录。而动态链接库位于 “lib\gcc_dll”子目录。
仔细观察,会发现库文件名称中,有不少带有“ud”字母的文件,其中‘d’表示“debug”,即调试版本 ,不带‘d’的通常是“release”版本。
‘u’表示“Unicode”,即支持Unicode编码。虽然我们这一次编译的全部采用“Unicode”选项,但还是存在一些文件并不带‘u’字母,那是因为这些库并不涉及到字符串的国际化处理,所以不需要考虑编码,比如与Jpeg图形功能有关的库。
libwxbase28u.a |
wxbase28ud_gcc_custom.dll wxbase28ud_net_gcc_custom.dll |
在gcc_dll目录下,除了扩展名为“.dll”的动态链接库以外,还存在大量的扩展为“.a”的文件,称为“导入库/Import library”,为了节省篇幅,上表未加列出。
“导入库”在编译时向应用程序提供信息,以辅助应用程序在运行时,定位具体某一功能在DLL文件中的入口。也就是说,今后编译程序时,将用到它们,但它们不必随同程序一起发行。
2.4.4. 相关网址
wxWidgets 官方网站:
wxWidgets扩展代码:
chinaunix网友2011-03-06 15:58:56
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com