首页>参考读物>计算机科学与技术>软件与程序设计

C++跨平台开发技术指南
作者 : Syd Logan
译者 : 徐旭铭
丛书名 : C++设计新思维
出版日期 : 2008-10-17
ISBN : 7-111-25082-1
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 318
开本 : 16开
原书名 : CrossPlatform Development in C++Building Mac OS X,Linux,and Windows Applications
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书是开发可移植C/C++应用程序的权威读物,它指导编写的代码可以无缝地运行在Windows、Macintosh和Linux平台上而不需要牺牲任何功能、易用性或是产品的品质。
本书是开发可移植C/C++应用程序的权威读物,它指导编写的代码可以无缝地Mozilla和Netscape的资深工程师Syd Logan系统地讲解了所有和软件移植性有关的技术和管理上的挑战,包括编码、测试以及部署上的设计和考量。基于他丰富的跨平台开发经验,Logan完整地讨论了从原生API的使用到最新的可移植GUI开发策略等一系列问题。他还展示了如何避免传统跨平台开发方法里存在的问题,以及如何达到特性的对等性。
  本书对正在构建新的跨平台软件,移植现有的C/C++软件,或是考虑将来为软件添加跨平台支持的每一位软件从业人员和技术经理来说,都是必不可少的资源。
  本书详细介绍跨平台应用的构建方法,包括真实的场景和大量实用的代码示例,以及一个完整的基于Mozilla XUL的跨平台GUI工具包,你可以在网站上下载到所有的源码,并从中获益。
  ■Netscape在向数百万Windows、Mac OS和Linux用户发布浏览器时采用的策略和过程。
  ■在所有平台上提供一致的功能和接口。
  ■理解流行的平台GUI API之间关键的相似与不同,它们包括Win32/.NET、Cocoa和Gtk+。
  ■决定使用原生IDE的时机,以及如何限制它们对移植性的影响。
  ■使用基于标志的API,包括POSIX和STL等。
  ■避免隐晦的移植性陷阱,相关的如浮点数、char类型、数据序列化,以及C++的类型等。
  ■利用平台抽象库,如Netscape Portable Runtime
(NSPR)等。
  ■建立一个有效的跨平台bug报告和跟踪系统。
  ■为多个平台创建build并在跨平台构建失败时检测到它们。
  ■理解本地运行环境以及它们对安装程序的影响。
  ■使用wxWidgets从一个代码库里来创建多平台的GUI应用程序。
  ■完整地测试应用程序的可移植性。
  ■通过Trixul理解跨平台GUI工具包的设计。

图书特色

封底文字

本书是开发可移植C/C++应用程序的权威读物,它指导编写的代码可以无缝地运行在Windows、Macintosh和Linux平台上而不需要牺牲任何功能、易用性或是产品的品质。
本书是开发可移植C/C++应用程序的权威读物,它指导编写的代码可以无缝地Mozilla和Netscape的资深工程师Syd Logan系统地讲解了所有和软件移植性有关的技术和管理上的挑战,包括编码、测试以及部署上的设计和考量。基于他丰富的跨平台开发经验,Logan完整地讨论了从原生API的使用到最新的可移植GUI开发策略等一系列问题。他还展示了如何避免传统跨平台开发方法里存在的问题,以及如何达到特性的对等性。
  本书对正在构建新的跨平台软件,移植现有的C/C++软件,或是考虑将来为软件添加跨平台支持的每一位软件从业人员和技术经理来说,都是必不可少的资源。
  本书详细介绍跨平台应用的构建方法,包括真实的场景和大量实用的代码示例,以及一个完整的基于Mozilla XUL的跨平台GUI工具包,你可以在网站上下载到所有的源码,并从中获益。
  ■Netscape在向数百万Windows、Mac OS和Linux用户发布浏览器时采用的策略和过程。
  ■在所有平台上提供一致的功能和接口。
  ■理解流行的平台GUI API之间关键的相似与不同,它们包括Win32/.NET、Cocoa和Gtk+。
  ■决定使用原生IDE的时机,以及如何限制它们对移植性的影响。
  ■使用基于标志的API,包括POSIX和STL等。
  ■避免隐晦的移植性陷阱,相关的如浮点数、char类型、数据序列化,以及C++的类型等。
  ■利用平台抽象库,如Netscape Portable Runtime
(NSPR)等。
  ■建立一个有效的跨平台bug报告和跟踪系统。
  ■为多个平台创建build并在跨平台构建失败时检测到它们。
  ■理解本地运行环境以及它们对安装程序的影响。
  ■使用wxWidgets从一个代码库里来创建多平台的GUI应用程序。
  ■完整地测试应用程序的可移植性。
  ■通过Trixul理解跨平台GUI工具包的设计。

图书序言

作为Firefox、Mozilla和Netscape浏览器解析和渲染超文本标记语言/可扩展标记语言/层叠样式表(HTML/XML/CSS)的引擎,Gecko是全世界使用最广泛的渲染引擎之一。
而我身为Netscape的工程师以及后来Mozilla Gecko团队的开发经理,有幸从一开始就参与了Gecko引擎的开发。
Gecko诞生时的愿望是要创建一个跨平台的、小巧快速的、先进的可嵌入Web浏览引擎,而这一点正是我们在“浏览器大战”中争夺优势的砝码。当时笨拙的Netscape 4x引擎显然已经无法再完全支持CSS2、CSS3和XML Web标准了。所以有人提出只使用原有的引擎的一部分库来重新开发。在Gecko项目的早期,我们曾经讨论过要采用拥有跨平台能力的Java而不是C++。但最后还是觉得只有C++以及它特有的开发过程、工具和设计技术,才能产生最好的解决方案。本书将会把这些过程、工具和设计技术作为最佳实践来逐一描述。
在进入Netscape工作之前,我曾为很多公司开发过跨平台软件。然而,Mozilla项目把这些经历提升到了一个完全不同的高度。我们使用和开发了一系列软件架构、工具和过程来实现大范围内的跨平台开发工作。
我的第一个任务是把Gecko从微软Windows系统上移植到Motif/Xlib上去。写过跨平台软件的人都知道,刚开始的移植工作是最有挑战性的。你会在那时发现软件的移植性到底如何。即使Gecko从设计的时候就是以可移植为目标,然而平台和编译器之间的细微差异还是搞得我们很头疼。这就是为什么需要有一个像Mozilla Tinderbox那样的工具来验证checkin代码的可移植性,并且还需要一个软件开发过程来要求工程师在向代码仓库提交新的源代码之前至少在两个平台上验证过。
Gecko引擎开发的动机之一,是要在它上面重现Netscape Communicator的用户界面体验。这就要求有一个跨平台的用户界面方案,因为Netscape Communicator就是在多个平台上提供了图形用户界面的环境。所以我就有了这样一个机会来设计一个用户界面策略以解决这个棘手的跨平台问题。我撰写了一份文档,解释了如何在Gecko渲染引擎里把描述用户界面元素的XML元描述(XML meta description)与作为控件和事件逻辑的JavaScript相混合,以达到跨平台用户界面的目的。这份文档后来成为了XUL(XML User Interface Language)的原型。再后来,Firefox的开发人员用XUL和Gecko引擎开发出了小巧快速、广受欢迎的跨平台Web浏览器。第9章描述了如何在XUL上创建你自己的跨平台用户界面。
作为W3C SVG(Scalable Vector Graphics)最早的成员之一,我对Gecko能不断地进化和解决跨平台问题感到非常兴奋。最近添加的对SVG的原生支持则又是Gecko可移植性的一大胜利。
Syd Logan在这里要展示的信息是无数工程师对于那些和创建跨平台软件产品相关的特殊问题的真知灼见。虽然它是以C++为蓝本,不过很多技术都是可以为其他非C++软件项目所借鉴。我希望你能从中发现有用的工具、技术或是过程,从而避免跨平台开发中的陷阱,让你的项目取得巨大成功。

Kevin McCluskey

作者简介

Syd Logan:Syd Logan: 是一位工作生活在南加州的软件工程师,拥有圣地亚哥州立大学的计算机科学学士和硕士学位。Syd曾是Netscape Client Product Development(CPD)团队的一员,在Netscape 6和7的开发过程中,他同时担任了开发和管理的职务。之后,Syd留在AOL并作为AOL Instant Messenger团队的一员实现了VoIP和点对点视频的特性。Syd的其他著作还包括《Developing Imaging Applications with XIELib》和《Gtk+ Programming in C》(Prentice Hall 1997和2001)。他的研究兴趣包括机器学习、操作系统设计、算法,以及任何与C、C++和UNIX有关的事物。

译者简介

徐旭铭:暂无简介

译者序

这是一个Java横行,LAMP肆虐的年代。很多人说C和C++早已落伍了,将在网络大潮中默默隐去,但当你读完本书,便会体会到C和C++的魅力所在。
本书向读者完整地呈现了C和C++在跨平台领域上的方方面面。从丰富的工具,完善的软件工程,到开发、部署、安装以及系统设计。什么问题应该避免,什么地方需要注意,十几年的经验让本书作者深谙此道。他不用理论来证明自己,而是用作品来展示理论。只有高手才能达到这种境界。
说到本书作者,Syd Logan是一位资深工程师,在C和C++领域耕耘数载。他全程参与了Netscape和Firefox浏览器的开发工作。此外,他还负责为AOL开发VOIP和点对点的视频功能。
作为本书的译者,我也在翻译过程中获益匪浅。作者展示的是多年来在跨平台开发中的心得体会,即便你开发的不是C和C++的跨平台项目仍可从中受益。毕竟语言只是工具,设计思维才是最宝贵的财富。
无论Internet怎样发展,一切内容都要通过浏览器展示给用户。当年微软正是意识到这一点,才对Netscape发动了浏览器战争。出色的技术和商业成功没有必然联系,Netscape倒下了。然而其中的积淀却借着Mozilla凤凰涅槃。相比IE的不思进取,Firefox 3如火如荼的发布正说明了优秀的作品最终将得到用户的肯定。
我也希望大家能从本书中找到自己想要的知识。
如发现任何纰漏之处,敬请指正。
在此感谢华章图书的陈冀康老师对我的信任和鼓励,还要感谢Lydia和Ada的支持。

徐旭铭

图书目录

“C++设计新思维”丛书前言
译者序

前言
引言

第1章策略与管理1
条款1:把所有的平台都放在同样重要的
位置1
条款2:使用公共的代码3
工厂模式在不同平台上的实现8
类的实现9
平台相关的ProcessesImpl类10
创建实例层次18
用CVS或SVN组织项目20
编译代码和Makefile22
条款3:要求开发人员用不同的编译器
编译代码24
条款4:要求开发人员在不同的平台上
编译代码26
条款5:测试所有的平台28
条款6:关注编译警告29
GNU 标志29
微软Visual C++30第2章Build系统和Toolchain31条款7:使用最适合平台的编译器31
条款8:尽量使用本地IDE32
条款9:在Windows上安装和
使用Cygwin34
条款10:使用跨平台的Make系统37
Make37
在Windows上编译Makefile和源码40
Autoconf/Automake43
Imake46
在Mac OS X上安装Imake46
在Windows上安装Imake46
一个例子:使用Imake48
Imakefile文件49
完整编译的一个多文件程序49
在sitedef里重写默认值51
去除代码里的#ifdefs53
Imake中用到的文件57
编译含有子目录的项目58
Debug的编译73第3章软件配置管理74条款11:使用跨平台的bug报告和
跟踪系统74
可访问性75
跟踪平台相关bug的能力75
Bugzilla75
条款12:设置Tinderbox80
条款13:用CVS或Subversion来管理
源代码84
设置和使用CVS86
条款14:使用patch90
一个例子90
patch选项91
应对reject92
patch和跨平台开发93第4章安装与部署94条款15:为本地安装程序提供支持94
XPInstall94
平台安装97第5章操作系统接口和库130条款16:使用标准API(如POSIX)130
POSIX130
支持POSIX、SVID、XPG和BSD132
在GCC里使用标准支持133
微软Runtime Library对POSIX的支持…135
在Windows上使用GCC137
决定支持哪个标准141
条款17:考虑使用NSPR这样的平台
抽象库141
为什么要开发NSPR142
NSPR基础143
线程146
NSPR的其他功能153第6章其他可移植性主题161条款18: 慎用浮点数161
不要把浮点值序列化为二进制162
判断相等163
条款19:显式地注明char类型的符号164
条款20:避免序列化二进制数据165
条款21: 避免类型长度和组织带来的
问题174
整型的长度174
NSPR里的类型176
长度和效率177
整型转换177
struct的对齐和顺序178第7章用户界面180条款22:从Model里把用户界面分离
出来180
用Model/View把用户界面和程序逻辑
分开181
用Publish/Subscribe在View和Model
之间通讯190
小结192
条款23:开发一个跨平台用户界面的
策略193
影响跨平台GUI开发移植性的问题193
选择GUI的策略194第8章wxWidgets196wxWidgets概述197
许可协议197
安装wxWidgets197
一个简单的例子:Hello wxWidgets199创建应用程序的用户界面200
编译wxWidgets应用程序205
控件与事件207
容器widget216
对话框235
复合式widget243
ⅩⅨ国际化和本地化247第9章用C++开发跨平台GUI工具包…259什么是XUL259
DHTML260
HTML260
脚本语言262
文档对象模型263
样式系统265
XUL266
窗口和对话框266
box元素266
工具条268
菜单268
控件268
其他widget268
用XUL编程269
用JavaScript为UI添加逻辑269
用XPCOM和XPConnect接口化JavaScript
和C/C++270
Trixul271
Trixul支持的widget272
Trixul的基本操作272
widget273
类的实现275
创建widget实现的对象280
widget工厂282
应用程序主循环285
Trixul创建用户界面的步骤288
文档、元素和DOM288
创建widget291
布局292
滚动窗口和布局296
和JavaScript集成297
和C++组件集成304

教学资源推荐
作者: [美] 基普·R.欧文(Kip R.Irvine) 著
作者: (美)Kenneth C.Louden
作者: Tom Cargill
作者: 王珊珊 臧洌 张志航 编著
参考读物推荐
作者: (美)Steven Hoober; Eric Berkman 著
作者: 深圳中科呼图信息技术有限公司 编著
作者: [美]马克·米凯利斯(Mark Michaelis) 著
作者: 赵永发 刘莉莉 等编著