2009年3月14日星期六

GTK的Windows移植

howroc
04-12-09, 12:23
因为一个朋友的关系,要在windows下编译gtk的代码,我查了一些资料,现在使用的方法如下:

(1) 需要文件:
GTK-Runtime-Environment-2.2.4-3.exe:http://prdownloads.sourceforge.net /gtk-win/GTK-Runtime-Environment-2.2.4-3.exe?download。安装到C:\RunTime_GTK。
GTK-Development-Environment- 2.2.4-3.exe:http://prdownloads.sourceforge.net/gtk-win/GTK-Development- Environment-2.2.4-3.exe?download。安装到C:\Dev-C++.
devcpp4991setup.exe,就是bloodshed的一个IDE环境: 搜索。安装到C:\Dev-C++。

(2)设置环境变量:SET PATH=%PATH%;C:\RunTime_GTK\bin;C:\RunTime_GTK\lib。在98下我直接该了autoexec.bat。

(3)运行Dev-C++,在"工具->编译选项->目录->库",加入:C:\Dev-C++\lib

(4)"工程->工程属性->参数" 或 "工具->编译选项"中的链接器框里面填入:-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv

(5)工具->编译选项->目录->C包含文件:
C:\Dev-C++\include\gtk-2.0
C:\Dev-C++\lib\gtk-2.0\include
C:\Dev-C++\include\atk-1.0
C:\Dev-C++\include\pango-1.0
C:\Dev-C++\include\glib-2.0
C:\Dev-C++\lib\glib-2.0\include

(5) 工具->编译选项:
-mms-bitfields

然后可以写一个最简单的GTK程序,显示一个窗口。这没有问题。我又在Linux下用glade生成了一个最简单的工程,在Dev-C++中把生成的.c 和 .h文件加入到一个Dev-C++的C工程中,也可以通过编译(好象add_pixmap_directory()这一行有问题,注释)。但是,我前几天 写的pixbuf和键盘相应的工程却加不进来,总是报告没有定义。

现在的问题是,我当然希望在Linux下的工程能够拿到Windows下直接使用。在Windows下运行Glade无法Build,报告的错误中,是使用的错误的路径,特别是使用斜杠而不是翻斜杠。 不知道在Windows下能不能使用glade.

我还希望在Windows下能够使用Makefile。mingw我也试了一下,但我现在还没有automake,autoconf工具。我想在Dev-C++中先使用Linux下建工程后生成的Makefile,不知道行不行。

2009年3月13日星期五

Dev-Cpp/Mingw32 环境介绍(1)

Dev-Cpp/Mingw32 环境介绍(1)

摘要: Dev-Cpp/Mingw32 环境介绍(1)


前言
对于现在越来越多得关于编程方面得问题和商业公司对版权问题的担心。所以向各位推荐一款类似于VC的IDE。这款IDE所使用的编译程序是 GCC的Win32版本 Mingw32。而IDE本身也是GPL协议的产物。所以,不论是商业用户,还是个人用户都能够自由的使用她,而不必为使用盗版软件而提心吊胆的。另外,由于Mingw32是GCC的Win32版本。所以,也为Win32的程序员可以了解一下Unix和类Unix下的编程感觉。而且,Mingw32对 Win32函数的支持也是很不错的。希望,我们的Mingw32之旅可以带给你快乐。
介绍
有关Dev-Cpp的介绍,我在这里不想多做解释。因为下面会具体的介绍和讲解的。我在这里只是想要介绍一下有关GCC的内容。因为,Dev-Cpp所使用的Mingw32是一款GCC编译器。所以,对GCC的了解有助于使用Dev-Cpp。
gcc.exe 这是一个C语言的编译器,负责编译C语言。这个也许大家都知道。不过,在这里我要先向大家说明一下。gcc只是一个C语言的编译器。不能识别C++代码。所以,以前所说的gcc可以编写C++是一个误传。因为,我们通常所说的GCC不是gcc.exe而是GCC的一套程序。其中就包括可以编译C++语言的 g++.exe
如果,你不确定这个gcc的版本,可以用如下的命令查看。
gcc -v
关于编译,gcc可以通过命令符编译。
gcc source.c -o binary
以上的命令,是让gcc直接由.c代码编译成可执行代码。也可以这样。
gcc -c source.c -o code.o gcc code.o -o binary
这样就生成了一组二进制代码,然后在通过二进制代码生成可执行程序。
g++.exe 刚才已经说过了,这个是一个用于编译C++代码的程序。基本用法和gcc一样。所以这里不再介绍了。只是让各位了解一下,这个程序是编译C++代码的。
gdb.exe 用于调试程序的。功能非常强大。可以调试C,C++等语言。据说还可以调试Java程序。不过我没有试过。对于gcc/g++编译出来的程序。需要再编译时加上 -g 参数。gdb才能进行调试。有点像VC的debug。
make.exe 这是一个非常有用的程序,可以用来发布程序和编译复杂关系的代码组。其实有点像提示符版的安装程序。不同的是,安装程序是一段二进制执行代码,而它是一个文本文档。 make所执行的是makefile文件。文件是一个文本文档,里面包含了程序的编译规则。如果要用提示符调用的话可以用如下方法。
make -f makefile
然后,make会根据makefile所提供的编译关系进行编译和安装。下面是一段makefile的内容。请注意,其开头的空白是 tab。
release : main.o gcc main.o -o main main.o : main.c gcc -c main.c -o main.o
然后,通过命令 make -f makefile release 就可以执行了。 make会根据文件的创造日期来判断是否要对main.o进行重新编译。也就是说,make可以知道作者修改了哪些文件,并将修改过的文件重新编译。再连接成程序。这样有助于开发者节省开发周期上的时间和精力。
好了,希望上面的介绍能让各位满意。在此,我只介绍一些主要的程序,不一一介绍其他的了。接下来我们介绍一下gcc生成的文件。
*.o 其实就是VC生成的*.obj lib*.a 就是VC中用的*.lib静态链接库。只是,每个库必须用lib开头。在调用的时候,只要提供*的内容就可以了。 *.so 虽然在Win32中很少用,几乎不用但,还是介绍一下。这个就是Win32中的*.dll动态连接库。但是,在Ming32中已经支持dll了。
好了,关于gcc的介绍就到这里。下面我们开始进入正题。
第一章 安装Dev-Cpp
在这里,我不介绍Mingw32如何安装。因为Dev-Cpp中已经包含了Mingw32。如果您想了解Mingw32如何安装,可以查看其他相关的资料。这里不作阐述。首先,我们必须下载一个Dev-CPP的安装程序。Dev-Cpp的官方网站是http://www.bloodshed.net。Dev-Cpp的网页是http://www.bloodshed.net/dev/devcpp.html最新版本应该是Dev-Cpp 4.9.9.0它的下载地址是 http://umn.dl.sourceforge.net/sourceforge/dev-cpp/devcpp4990setup.exe 。这个下载的文件中包含了全部的内容。在得到安装程序以后,我们就来安装了。不论如何,我想,安装这种小问题,我想不用再一步步介绍了吧。毕竟我们都是程序员,如果,连安装都不会那真是……。不过,如果在安装中有什么问题,可以提出。我会尽力帮你解决的。双击安装程序后,就按照平常安装的方式安装,建议按照默认安装。当然安装的路径就算便你了。在第一次安装以后,程序会提示你界面的设置。如果你喜欢英文就选择English。如果喜欢中文的,就选择Chinese。注意不要选择Chinese(TW)除非你安装了繁体中文。并喜欢繁体中文。然后是图标设置。推荐你使用New Look。如果你喜欢其他的也可以。还有就是是否使用XP风格。这些都随便你了。好了就介绍到这里,到此。我已经介绍了Dev-Cpp的安装,如果顺利。你们运行以后,就会看到如下的界面。
接下来介绍一下,有关Dev-Cpp在windows中的设置。由于GCC有很多的东西是要在提示符下进行操作的,特别是为Dev-Cpp安装,编译一些工具包。所以,我们就Mingw32添加到系统命令中,有助于以后方便调用。 方法很简单,右键单击 我的电脑。然后选色属性。使用 高级选项卡。点击环境变量按钮。点击 Path 项,点击编辑按钮。然后将DevCpp安装目录中的bin目录的路径添加到这个选项值的后面。注意,使用 ; 分隔。确定后启动命令提示符。输入 gcc -v 看。一切都好了。现在你就可以像在Linux环境下一样在Win32环境下编译程序了。
至此,您的Dev-Cpp环境就算弄好了。下面我们将介绍如何制作程序。
第二章 新建项目与编译
本章我们要进行实战训练了。介绍一下如何在Dev-Cpp下进行项目新建和编译。我相信你一定会慢慢喜欢上这个编译环境的。 点击文件菜单,选择新建,点击工程。在出现的对话框中选择你所需要的程序种类。如下图所示。
其中,Windows application是Win32图形界面。Console Application是Win32控制台程序。Static Library是Win32的静态连接库。DLL是Win32的动态连库。Empty Project是更具已有的项目类型创造一个新的项目类型。下面的内容是选择使用的语言,如是C语言还是C++语言。还有就是项目名称。这个名称将作为程序编译后的可执行程序的名称。 在这里为了方便叙述,我们就新建一个Console Application项目好了。至于使用的语言,就随便你了。我这里就用C语言为例了。点击确定后,提示项目保存的路径,建议您选择其他路径不要使用默认的路径,因为默认的路径是安装目录。如果放在那里的话,会很混乱的。在其他目录中,新建一个文件夹(当然不新建也可以,只是这样便于管理)将项目保存在那里。然后,在点击保存按钮(这个按钮就是一张磁盘,和Windows里的一样)或者从文件菜单中选择保存或者Ctrl + S。这些都可以。这样,Dev就会提示你项目中默认文件的保存目录。通常名为main.*。选择一个路径,保存就好了。(建议和项目文件保存在一起)
下面我们就来编译程序了。点击工具栏,第二行,第一个彩色的按钮。就进行编译了。这时会出现一个编译窗口,显示编译的进度。你可以通过环境选项来设置它。在编译完成后,点击第二个白色的按钮,就可以运行程序了。是不是很方便?我也是那么觉得。
接下来,我就来介绍一下,有关项目目录内的文件的作用。
main.c 程序的C语言源代码。 main.o main.c的二进制代码。 Makefile.win 就像我上面所说的,这个是项目的Makefile文件。用make命令可以编译程序的。 *.dev *的内容视你项目的名称所定。这个是项目文件,用于记录你对项目的设置。有关文件内个字段的作用就不做介绍了。 *.exe 你所生成的可执行程序。
最后,我介绍一下如何不用IDE来编译生成程序。首先进入您项目所在的目录。然后用如下命令。
make -f makefile.win all
就可以编译了。当然,也可以直接通过编译源代码来实现。具体的方法,我已经在开头介绍过了。这里就不再重复介绍了。
文外音: 文章就暂时介绍到这里,以后还会继续介绍。有关Dev-Cpp/Mingw32更多的内容以后会一一为各位展示。敬请期待。另外,还希望各位多多指教。我的格言:不论是程序还是思想,唯有通过不断的交流才能愈加完善。
STUDIO 软件开发组
北斗星君(黄庠魁)
Dev-Cpp/Mingw32 环境介绍(2)
上文回顾:
上文(《Dev-Cpp/Mingw32 环境介绍(1)》)我们知道了该如何安装和使用Dev-Cpp。并且,知道了一些有关Mingw32的一些用法和一些有关程序的介绍和使用方法。学会了一些基本操作的方法。如新建项目,编译项目等。这一次,我们将继续上一次的内容。
第三章 为你的Dev-Cpp安装开发包
对于许多程序员来说,让一套喜欢的开发包和一个自己喜欢的IDE结合在一起是最高兴不过的了。自然我也是。上一次我们了解了在Dev-Cpp中如何新建项目。但是,美中不足的是,她似乎只能新建一些简单的程序。比如控制台程序,动态连接库,静态连接库等。似乎要完成一项复杂的工作有些困难。当然,C/C++语言是一门鼓励代码重用的开发语言,我们可以对每个新建的项目进行设置,从而使用自己喜欢并习惯的开发包。但是,这或许太过于繁琐了。而且,安装,编译这些开发包的文件也太过于麻烦了。所以,Dev-Cpp也就为各位开发者提供了 包 的概念。在Dev-Cpp中有一个包管理系统。使用这个系统,你可以方便的安装各种开发包。有了这个,你的Dev就会越来越顺手。那就像《人月》中的一篇文章的标题《Sharp Tool》(锐利的工具)那样了。下面我们就来一步步学习如何安装开发包。首先,我们必须有一个已经做好了的开发包。我们可以从Dev-Cpp的官方网站获得。这里是开发包的下载页面的地址 www.bloodshed.net/dev/packages/index.html 在上面你可以找到很多你熟悉的工具。当然,如果没有也有和你喜欢的工具类似的工具。如果,你觉得这些工具太古来了,或者还不够。在页面的下方就有一些镜像站点的地址。通常,这些镜像的内容要比主站丰富许多。所以,你可以从很多途径得到这些包。现在我们就随便下载一个作为演练。如果你不建议,我们就下载一个 Fast Light Toolkit。当然,你也可以下载其他包。我这里只是作为讲解。 在下载完成以后,我们将会得到一个后缀名为 *.DevPak 的文件。这个就是开发包文件。这个文件的使用和我们平时使用的安装文件一样。不同的是,安装文件会修改注册表,将安装信息些进去。如果系统重新安装,就需要重新安装程序。而这个安装文件不会将安装信息写入注册表。并且,只要安装程序的目录没有删除。下次安装的时候,就不许要再安装了。除非使用的 Mingw32过新或者过旧无法支持。现在,我们好好的保存这个文件。 接下来话分两头,我们来介绍一下 Package Manager 这个程序你可以用两种方法启动。一种是点击Dev中的工具菜单,选中最后一项的Package Manager。另一种方法是到安装目录中,直接运行 Packman.exe 。运行以后你就会看到如下的一个界面。
如果,你运行以后没有看到左侧的工具栏或者上面的工具栏。你可以在View菜单中将其中的选项全部选上就可以了。下面介绍有关操作的一些方法。其中,Install按钮是用来安装开发包了。而Verify按钮是用来检查开发包的完整性的。而Remove按钮是用来删除开发包的。这个界面中间空白的部分是显示开发包图标的,左侧的工具栏是用来显示开发包信息的。其中包括开发包的名称、版本号、介绍和提供的站点等信息。上方的工具栏是用方便用户操作的。基本上菜单中有的。工具栏上都有了。所以,普通的工作工具条就可以完成了。
好了,到这里。我们的话再说回来。所谓言规正传,大概就是派这个用场的吧。(怎么突然想到鲁迅先生的《阿Q正传》呢?真奇怪。)我们介绍一下安装包的方法。安装工具包的方法有两种,当然是我常用的两种。至于有没有其他方法。自然也有。只是我个人还是比较喜欢这两种。如果哪位有什么比较怪诞的方法自然也可以用。只要能够顺利使用,用什么方法都是可以理解的嘛。所谓条条道路通罗马嘛。有些时候,我们不必过于计较方法,我们要的是结果。第一种方法,就是像我们平时使用安装程序一样。直接双击那个工具包。Package Manager 会很热情的跳出来帮你完成任务的。然后,你就更具提示一步步的走就可以了。这种方法的确很不错。只是觉得用起来不够专业。如果被人看到,会被别人认为是菜鸟的。所以,我这里为大家隆重介绍第二种安装方法。首先你先运行Package Manager 然后点击Install按钮。她会提示你告诉她工具包的位置。只要选择好工具包,点击确定。剩下的就和第一种方法一样了。这种方法看起来会比较老鸟一点。不过太麻烦了。不是么?那么是不是我们要在菜鸟和老鸟种做选择呢?当然不用。我个人意见是,平时就用第一种方法。有人请教什么的,就用第二种方法。好了,安装好以后。我们会看到Package Manager中会多一个图标。这个就是你刚才安装的工具包。如果觉得用起来不爽就选中她然后按Remove就可以了。下面你可能会问我,我安装完了。改如何用呢?问的好,值得表扬。这个问题嘛……当然是很简单的啦。要是连这个也不能回答我怎么能在这里说,你在那里听呢?(诶,原本想早点说完回家睡觉的……)对于不同的开发包,使用的方法会有所不同。如果是IDE自身的开发包。那么,你在使用IDE的时候IDE会在运行时调用的。就不用你操心了。要知道,一个人操心太多会多很多皱纹和死很多脑细胞的。而一些开发工具就可以在新建工程中看到,至于具体在哪里要看具体的包而定。 接下来我还是以Fast Light Toolkit为例。来说明包的使用方法。Fast Light Toolkit是一个GUI开发包。(我想你该知道什么是GUI吧,说的简单一点就是Graphical User Interface。说得复杂一点,就是用户界面)好了。我们现在开始新建一个工程,这个在上文中已经介绍过了。不过这次在确定项目的时候有些改变。这次,我们在点击新建工程后出现的对话框中,选择GUI选项卡。然后选择FLTK。因为FLTK是用于C++的。所以,我们这里只能用C++而C是不可选状态的(怎么有硬来的感觉)。接下来的一切和上次我们说好的一样了。Dev会自动生成一个main.cpp的文件。里面有一些基本的代码。保存后编译,运行。可以看到一个你仰慕以旧的Windows界面。(啊,终于看到你了,窗口)我想,那么聪明的你应该会举一反三,知道其他的工具包如何使用吧。所谓,师父领进门,修行靠自身。我也不可能一步到位啊。最后,我想请你们注意一下。在安装包之前,先要看清楚有关包的说明。因为有些包是有依赖关系的,必须在安装某个包之后再安装她。这就像,要知道有些时候同样的结果是不能将操作的顺序颠倒一样。比如,你必须先有个妻子,然后才有个儿子。(除非特殊情况)
第四章 工程的导入与导出
四这个数字总是不太吉利。在中国是这样,在国外好像也这样吧。既然我们不能跳过四,直接到五(因为那样,别人会认为是不是自己漏看一章而觉得遗憾终生的)所以,我就在这章介绍一些无关痛痒的东西。就算不吉利也不会影响到我们开发的。对于用惯VC开发的人。有许多项目在Dev下开发还要重新在设置和编写,会觉得很头痛。所以,Dev就在她的里面加了一项将VC6.0的工程文件转换成 Dev的工程文件的功能。(这句话好绕口啊,下次把它改成绕口令算了)是个好消息吧。首先,我们必须有一个VC6.0的工程做测试。没有也没有关系,看看长长见识也不错。反正这章讲的是不关痛痒的内容。接着,我们开始导入了。选择文件,导入,导入Visual C++ Project。点击后,会出现一个对话框。在第一个选项选择*.dsp的路径(填入也可以,只要你能把完整路径写出来)。选择完毕后。对话框就会出现有关该项目的一些属性。你只要选择就可以了。比如,第二个框内的内容就是问你是导入那种生成配置。Debug或者Release还是其他什么的。第三个框内问的是你要将Dev的项目文件放在哪里。(当然是在你自己的计算机上,还有哪里?难道让勇气号带到火星上不成?)全部选择好以后就可以了按确定了。在等待一段时间后(具体长短,要看你的程序体积如何,如果像VC编写的Linux Kernel。那么是要等一段比较长的时间。如果有的话)。现在开启Dev项目看看。怎么样,一切正常吧。是不是很兴奋?或许有人要问,这么重要的功能为什么说是无关痛痒的功能呢?其实,更具我使用下来的情况。导入的代码能够成功编译的,算是你幸运的要准备去买六合彩了。因为,直到现在我还没有导入过一个可以成功编译的项目。(如果你可以,记得一定要告诉我,好让我见识一下传说中的可导入工程)。下一个功能是导出。这个功能当然不像上一个功能那么那样。不过,功能对于一般的开发者不会有太大的用处。你可别以为这个导出和上面的导入是相对的。就是把 Dev工程导出成VC6.0工程。这个导出,是讲C/C++的文件工程导出成网页形式。或者写字板形式的。如果你是像用这个工程做教程的确实是一个很不错的功能。不过,开发者还是编写代码大于写教程吧(好像我是个不务正业的开发者)。所以,我认为这个功能是有些无关痛痒。下面介绍一下使用方法。选择文件,导出后,会有三个选项。到HTML,到RTF和工程到HTML。第一个和第二个是对单个文件进行导出。而第三个是对整个工程进行导出。(就是所有的代码)第一,第二个的导出文件我也不用介绍了。反正也就那么一个文件。我具体的介绍一下第三个所生成的文件。第三个生成了一个*.html,*的内容是由你决定的。和一个名位code的文件夹。里面包含了转成html文件的程序代码。当然,这些代码都是有色彩提示的,很不错。这样看来,所谓的导出工程,其实就是将整个工程文件转换成一个类似于网站树型结构的功能。所以说,这个功能用于说明代码是很不错的。好了介绍到这里,介绍了一些无关痛痒的功能。我想,你们也许也对Dev-Cpp有一个大概的了解了吧。如果,你想知道更多的关于导入和导出的功能的介绍。可以提出来。大家一起来解决嘛。
文外音:
文章就暂时介绍到这里,以后还会继续介绍。有关Dev-Cpp/Mingw32更多的内容以后会一一为各位展示。敬请期待。觉得这次的文章,好像没有上次那么有含金量,而且写作风格也有所改变。如果你喜欢这种风格我以后会多运用,如果不喜欢请你说出喜欢那种风格的。我会作为参考的。另外,还希望各位多多指教。我的格言:不论是程序还是思想,唯有通过不断的交流才能愈加完善。
STUDIO软件开发组
北斗星君(黄庠魁)
Dev-Cpp/Mingw32 环境介绍(3)
上文回顾:
上文《Dev-Cpp/Mingw32 环境介绍(2)》向各位介绍了一些有关Dev-Cpp的功能,其中有包的安装和一些小功能。希望能得到你的满意。这次,我们就继续介绍Dev-Cpp的其他功能。其实,说句实话。对于GNU的东西,我个人觉得还是提示符下用的舒服。我也不知道为什么。有很多功能,在提示符下很简单的打几个字符,可以完成像 Windows的IDE需要点很多鼠标才能完成的功能。我说这个并不是没有道理的空穴来风。本次我将为你展现我这一观点。
第五章 在Dev-Cpp下的程序调试
对于任何程序员来说,程序的调试是再需要不过了。如果没有程序调试,那么程序的稳定又从何说起呢?现在我们就来看看如何使用Dev来调试我们亲爱的程序吧。众所周知,GNU有一个非常棒的调试程序GDB,可是由于常常使用VC。所以,对于这个许多人都有所而闻而未目睹这一程序的芳容。现在我们就来掀开他的盖头来。首先,我们超常,启动Dev-Cpp这次我们要做的是在Dev-Cpp下调试程序。在Dev-Cpp下,调试程序并不像在VC下那样有专门的程序界面来做。他的调试界面就在代码框的下面。只要选择下面的 调试 选项卡就可以看到调试界面了。在各位看到调试界面后,会不会有一种凄凉的感觉?其实我已经凄凉了好几年了。大家也就将就一下了。其中调试选项卡中还有三个选项。调试,回溯,输出。其中,调试就是将一些调试的命令做成按钮,方便各位操作。不过我个人觉得这个功能说方便也不方便。因为有些时候就是很简单的一个操作也会让使用的人手忙脚乱的。回溯,是将GDB调会的有关函数的信息显示出来,这个功能还不错。输出,是将用户的GDB命令直接输出给GDB程序,没有按钮了,不过这个界面有个不太好的地方,就是显示GDB返回信息的窗口太小了。有种管中窥豹的感觉,很不舒服。话说那么多,觉得有些罗嗦。各位是不是手痒痒了?(该不是小儿多动症吧?)现在随便开启一个程序,最好是代码行数多点的,参数多点的,函数多点的,提示符界面的程序。因为,这个可以帮助你们了解基本的运行机制嘛。点击调试窗口的调试按钮,如果你的程序没有调试信息,那么Dev会提示你是否重新编译程序加入调试信息。选择是。然后程序将使用Debug方式重新编译连接程序。在完成之后。我们就开看看自己的程序吧。首先,我们先要运行GDB。在次点击调试,或者将编辑区的光标移动到你要运行到的位置点击运行到光标。然后,程序就开始运行了。其中,你会看到在编辑区中有一个蓝色的条子。这个就指示你该程序运行到何处了。如果你愿意,可以继续向下运行一行。你只要点击下一步就可以完成。对于其他有关GDB的操作,比如代码的查看,变量的查看,函数的信息等等,只有通过输出来完成了。选择输出,然后在输出中的字符输入框中输入你的GDB命令。比如:list 这个命令将在下面的字符框中列出程序的代码。当然,你要上下找找,因为框太小,看起来很麻烦。好了,有关IDE中的调试,本人就介绍到这里。在深入的东西,当然也没有深入的东西了。再深入的话,怕我没有累死,大家可要看着烦死了。其实上面介绍的一些操作如果再提示符下很容易就Ok了。更本不需要那么复杂。我想,可能这也是Dev不能流行的一个主要原因吧。因为界面的操作太不人性化了。
第六章 在提示符下的程序调试
上一章中,我们领略了Dev-Cpp下的调试。真是让人有些不感恭维。接下来我们来欣赏一下标准,经典的GDB调试。如果各位对Linux等系统有所了解的话,应该知道提示符是许多经典软件的常用界面。所以,要使用一些经典的东西,看来还是要在提示符下多熟悉熟悉了。当然,这里的提示符并不像各位想的那么麻烦,要有上百条命令要记忆。其实,像GDB这样的程序,基本就是一个很简单的命令就可以解决了。而且非常灵活。 接下来我就来介绍一个GDB的调试。首先我们必须要一个可以调试的代码。现在我们用gcc main.c -o main -g来生成可调试的代码。然后用gdb main 来启动gdb。是不是没有想象的那么复杂啊?如果顺利您会看到一段GDB的版权信息,接着是(GDB)这样一个提示符。现在您就可以对GDB下命令了。看看程序代码。如果,我们想看看调试程序的源代码而又不想开启main.c这个文件(更多的原因是要为后面设置断点等来做铺垫)。那么我们可以输入 list或者,l就可以查看程序代码了。是不是啊?看来提示符并没有像我们想象的那么可怕。运行程序代码。虽然调试是可以那么我们该如何在调试的时候运行代码呢?很简单。输入run或者r就可以运行了。如果前面设置过断点,那么使用这个命令可以让程序运行到断点。 为调试设置断点。使用break可以设置断点,让调试程序在断点停止运行的程序。break 后面必须有一个参数。参数可以是行号。如,break 10 就是在第10行设置断点。也可以是函数名称break main就是在main函数处设置断点。查看程序变量。如果您像查看程序中的变量,可以用paint或者p命令来实现。这两个命令后必须加上变量名称。如 p argc就是显示argc的值。而使用info命令可以查看相关的信息,如内存位置什么的。一步步运行程序。如果您像在断点后一步步的执行程序,可以用n或者next命令来执行下一行代码。 退出调试。输入q退出程序。
是不是觉得提示符下的调试要比IDE中的简单?你不要以为这就是GDB的全部功能。我在这里只是为各位展示一下GDB。如果各位要了解更多的关于GDB的使用方法。可以查看技术手册或者到网上寻找相关的文章,可以找到很多。 最后,如果对于GDB和调试程序有什么疑问,我们可以一起探讨。
文外音:
这次的文章好像很短,我也觉得。但是,没有办法。所谓众口难调。这一章总是要讲的。干脆提早一些写好。下一篇我们将进入项目的建立和静态库的使用。我想一定会让你感到兴奋的。最后,希望你能够多多指教。我的格言:不论是思想还是程序,唯有通过不断的交流才能愈加完善。
STUDIO软件开发组

GTK+, Qt, wxWidgets 比较简评

GTK+, Qt, wxWidgets 比较简评

//这位台湾的高手把GTK+, Qt, wxWidgets比较分析得相当到位。明显,MFC注定将淡出江湖了。

[心得] 知名 GUI lib 简评 (GTK+, Qt, wxWidgets)
之前因为把 MFC 痛骂了一顿,有网友在询问其他 GUI toolkit
所以小弟分享一下个人对三大知名图形介面 library 的简短评论
纯属个人主观意见,不是业界人士,所知有限,望先进前辈不吝指正或补充

先讲 GTK+
GTK+, Qt, wxWidgets 比较简评
//这位台湾的高手把GTK+, Qt, wxWidgets比较分析得相当到位。明显,MFC注定将淡出江湖了。

GTK+ 主要用在 X Window 上,整个设计的架构和许多概念和 MFC 以及一般 Windows 上
的程式开发大异其趣,入门门槛较高,而且最主要的特色是,他用不具有物件功能的纯
"C" 语言,模拟物件导向。 所以写起来比较复杂艰涩,而且充满大量巨集,使用和除错
都不是很容易,但优点则是可以用 C,不需 C++,如果和 Win32 SDK 比较,不会难学
多少,缺点是不易上手使用,而且文件比较缺,架构又非常复杂,且提供的东西比起其他
无所不包的 library,是简陋了一点,函数命名又臭又长。 对於简单的程式,GTK+ 会
显得太复杂,但是当你开始想扩充其他 library 也都没提供的进阶功能,就会开始赞叹
GTK+ 的架构严谨,还有超乎想像的高度弹性。 同样的东西要用 MFC 来做反而会要人命
并且多国语言的支援良好,内部也全面使用 UTF-8,相容性好,又是 unicode
能够习惯的话,GTK+ 值得推荐,但没有很建议学,毕竟不好学,要用到熟会需要比
较久,而且那样很多 C++ 的功能会用不到。 GTK+ 有 C++ 版本叫做 GTK--,没用过
但看文件觉得,并没有比 gtk+ 简单到哪里去。 因为 gtk+ 本来就是物件导向,所以
即使换了 c++ 语言,写起来架构还是差不多的。 另外,gtk+ 有 Windows 版本,但缺
点是,执行缓慢,不稳定,而且介面是使用 gtk+ 自己的,不是使用 Windows 内建的
"Native" 原生图形介面,看起来会不太习惯。 Mac OS X 下可用 X11 来执行 gtk+
但那样出来的程式是长得像 UNIX 程式,而不是美美的 OS X Aqua 外观

wxWidgets 和 MFC 最接近,命名习惯或架构都高度相似,会 MFC 几乎不用重新学习
有十余年历史,此外,他的物件封装比 MFC 要好,提供的功能也多上太多,又跨平台
一般知名的 MFC 程式都会选择用 wxWidgets 改写,来快速移植原程式到其他平台
例如 eMule 用 wxWidgets 移植出 aMule, xMule, 还在开发中的 Filezilla 3...等
而他最主要的特色是,他是"跨平台"的 "Native" GUI toolkit,在各种平台上都可写出
使用该平台内建 Native 原生图形介面的程式。 在 Windows 上就长得跟其他 Windows
程式一样,在 Linux 下就使用 gtk+ 的图形介面,在 Mac OS X 下就可以使用华丽的
Aqua 外观风格,这点是非常强悍。 不像 gtk+ 到其他系统都还是只能用 gtk+ 自己的
缺点是,中文支援在有些地方会出问题,例如剪贴簿的操作。 得自己 patch
但仍然相当推荐,即使是个庞大的 library,效能依旧不会太差,尤其在 Windows 上
执行速度并不输 MFC,与其学 MFC,不如学 wxWidgets。

Qt 的功能,应该是这三者加上 MFC 之中最强大的,文件也很完整,又有 RAD 工具
可以辅助开发,并且有商业公司做强力后盾。不但有 Windows/X Window/Mac 版本,
甚至还有嵌入式系统可用的版本,稳定性还不错,物件封装也算良好,资源比 GTK+ 或
wxWidgets 多得非常多,而且发行公司提供了相当多范例,算是一家以开放原始码成功
营利的模范公司。 知名的 KDE 整个是用他开发,证明了他的稳定性和强大功能。
缺点是如果你用他开发非 GPL 开放程式码的软体,必须以极昂贵的金额,购买商业
版本。 而他的图形介面并不完全是 "Native GUI",只是透过 theme 去模拟系统上的
标准 GUI,所以看起来很像,却会有些地方可以明显看出破绽。 执行速度缓慢还有过於
庞大则是另一个问题。 虽然封装得很良好文件也齐全,并不代表他就很容易学
还有一个严重问题是,他写的不是标准 C++,他使用的 signal/slot 机制必须透过 Qt
提供的 preprocessor 处理过才可以转送给编译器,这部份可能被限定用 qmake,算是
一个可惜的地方,不过瑕不掩瑜,还是很推荐。忘了说,他内部也是 unicode,
多国语言没问题。

以上三套只是简单介绍,其中 Qt 的程式我没有实际完整开发过,但明显的三套都远远比
只能在 Windows 上用,功能少 Bug 多难学难用几乎无多国语言支援的 MFC 要强。
三套可跨平台的 library 大家可自行选择,只能用在 Windows 的 MFC 就不用考虑了

2009年3月12日星期四

QT

Qt (pronounced "cute" by its creators[1]) is a cross-platform application development framework, widely used for the development of GUI programs (in which case it is known as a widget toolkit), and also used for developing non-GUI programs such as console tools and servers. Qt is most notably used in KDE, Opera, Google Earth, Skype, Qt Extended, Adobe Photoshop Album, VirtualBox and OPIE. It is produced by the Norwegian company Qt Software, formerly known as Trolltech, a wholly owned subsidiary of Nokia since June 17, 2008.[2]

Qt uses C++ with several non-standard extensions implemented by an additional pre-processor that generates standard C++ code before compilation. Qt can also be used in several other programming languages; bindings exist for Ada (QtAda),[3] C# (Qyoto/Kimono), Java (Qt Jambi),[4] Pascal, Perl (Perl Qt4),[5] PHP (PHP-Qt), Ruby (QtRuby), and Python (PyQt). It runs on all major platforms, and has extensive internationalization support. Non-GUI features include SQL database access, XML parsing, thread management, network support and a unified cross-platform API for file handling.