a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 196|回复: 3

[软件设计师] 2012年软考软件设计师辅导之C++开源库介绍

[复制链接]
发表于 2012-8-2 09:08:23 | 显示全部楼层 |阅读模式
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK)、各种跨平台应用的出现。   开源C++库必须具有以下特点:必须是成熟的产品、跨平台的产品、相对通用的库。
3 `+ a- R  r7 o  b& }3 O/ x  一、通用标准类 5 {* k* h3 X: j, p  r
  STL:C++标准模板库,呵呵,它也是开源的嘛。
' n3 r$ w$ T6 a7 X  boost:C++准标准库,它是强大地,江湖称之“千锤百炼”-------若掌握,必横行世界。
6 s+ m6 d3 Y2 b& h  deelx (轻量级的正则表达式解析类库,国产),boost里有强大的正则表达式解析库,但如果你只想要一个表达式解析,不想要拖上庞大的boost库时……支持一下国货。
# U) _. F; t0 D! Z  iconv /iconvpp : (C形式的编码转换函数库, $ n8 E* I/ Q7 E( ]
  二、XML解析库
* Z9 V* o1 R  h6 O9 O7 C) D  C++的XML相关库不少,但是大部分其实都是C库,使用起来自然不那么轻便。其中基于DOM的有TinyXml,基于SAX的当然是Xerces.前者小巧快捷,便于使用,适合做数据交换。后者则是全功能的XML解析器。 % V! m' u; F' ?: r  O9 e( J$ [
  哥更倾向于TingyXml.小巧啊!
. @) _) s+ U! U! q  xerces-c :最强大的XML解析库了,不是仅仅在开源库里,你尽管把商业的算在内。当然,它的变体,被IBM拿去卖钱的那个版本,多了数百兆的东东来支持各国编码转换,是更强大,但我觉得有小小的,开源的iconv在前不就够了? 8 j% @. E# m) w$ l. x
  根据博友的一篇博文对三个轻型xml解析开源库:SlimXml、TinyXml、RapidXml,对比如下:
+ E7 o% o, H/ T0 X6 x  解析这个3.3万行,1.5M大小的xml,三个库分别花了 ) V# w; P" R2 Z, ~, e- |3 e
  SlimXml: 22ms - a/ I: _- U& I8 p/ A
  TinyXml: 54ms
" d3 `* P9 A% M7 {: V) }/ h  RapidXml: 4ms!
- T! h7 K# Q8 H# n  结论是,RapidXml果然很强悍,居然比SlimXml快5倍多。 & _6 G- j  \/ o6 B
  比较欣慰的是,在没有很关注效率的情况下,SlimXml仍然比TinyXml快2.5倍。SlimXml走的是简单小巧路线,源代码只有 32k,而TinyXml和RapidXml的源码分别是147k和141k,有这样的效率可以满意了。因为这个库主要还是针对几十上百行的小文件,解析特别大的xml不在我考虑的范围之内。 % {( o, k$ O1 F9 k$ x
  还有irrlicht(鬼火引擎)的irrXMl解析器。
& h" R; {7 o9 T8 g
6 a' ?9 W* @: b6 L! _3 a% w& d  xsd (XML 与 C++数据结构的绑定工具)。(商业使用要钱)
回复

使用道具 举报

 楼主| 发表于 2012-8-2 09:08:24 | 显示全部楼层

2012年软考软件设计师辅导之C++开源库介绍

</p>  三、数据库 1 ^' @+ h6 b' M9 x: J" d4 L
  我比较喜欢OTL(用于连接数据库)。其他的没用过 ' T, m9 Y1 N0 X  t
  四、多媒体类 5 q0 h* x# c/ r1 C
  ——摘录别处,自己,没用过
7 S8 g' i' J% X8 B# m, q$ J  SDL (Simple DirectMedia Layer/多媒体直接访问层,用于游戏编程)。
1 e, y) ^" u5 J9 z6 G  相应的c开源库有ffmpeg、mpeg4、aac、avc、libmad、mpeg1、flac、ac3、ac3、matroska著名的多媒体播放器 TCPMP 天下闻名的跨平台、嵌入式手持设备视频播放器。
* J* s7 f3 S0 v8 I( U/ M- y  五、网络开发类 3 f$ C4 A) f) k9 ~
  1、gSOAP SOAP协议的C++支持库及代码生成工具。
1 [" Z2 l+ n( f8 [" T% [* h  2、ACE 网络编程研究首选。 4 O- ^1 f; d/ ]% |# H9 O
  ACE适合于研究,大型网络编程上效率不足,大型网游里面几乎没有用到ACE的,很多用了ACE的项目也被证明了效率不高。
) h" g. @9 J- D  V+ P! e% D  除了ACE之外,还有很多系统和网络编程方面的程序库。比如在线程库方面,还有ZThread、boost::thread,如果放大到C/C++领域, 还有APR,还有CII.在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的 C++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不但是 一个实用的程序库、框架集,还是一个典范的设计模式应用范例,非常值得学习。
! T& S8 N* R% z5 k4 k  3、根据博友回复,我整理如下:
7 S; R" M. K9 }3 s( N' c% V- K  开源C++库,称为POCO(POrtable COmponents – 可移植元件),非常方便好用。
( h3 P% S# g! K$ ?  特性:
5 U7 [7 H' Z2 }7 n. t4 X# Z, c  * 线程,程序同步及多线程编程高级抽象* 流及文件系统访问* 共享库将类加载* 功能强大的日志和错误报告* 安全及加密* 网络编程 (TCP/IP 套接字, HTTP客户端和HTTP服务器, FTP, SMTP, POP3, 等) 9 U6 j0 }$ J" v  ]$ k3 K
  * XML解析 (SAX2 和 DOM) 及生成* 配置文件及选项处理* SQL数据库访问(ODBC, MySQL, SQLite)
. T: O6 u/ S4 u% ~( S. u  a7 m& G  可以运行的平台包括: 6 d, v9 a) v6 V9 w. i1 I& T
  * Windows * Mac OS X * iPhone OS * (embedded) Linux * HP-UX * Tru64 * Solaris * QNX
* }5 @$ U2 c" h; O3 p. A  六、GUI库
9 o' G6 ]4 e- o2 R  BCG Windows平台下界面设计的第三方库,可以让你的界面更美好,更具时 代感。
1 u( E& L+ D, Y( B  wxWidgets :使用wxWidgets ,开发者可以基于同一套代码,为Win32, Mac OS X, GTK+, X11, Motif, WinCE等平台开发应用程序。wxWidgets库可以被C++, Python, Perl, and C#/.NET等开发语言使用。跟其它有些同样支持跨平台GUI开发工具不同,基于wxWidgets的应用,拥有真实本地化的视觉及使用效果——因为,wxWidgets使用(各)平台原生的控件,而不是简单通过贴图去模拟。wxWidgets是使用广泛的,自由的,开源的,成熟的。 9 r* t# M2 G- }( a4 Z( L/ @0 p( ~
  QT——界面(GUI)开发,支持C++/Java/Python/……多种语言。跨平台。最主要的好处是,API非常优 美!Qt本身也不仅仅只是做GUI编程,实际它基本上可以做OS-API可以做的任何事情。象网络/数据库/OpenGL/……都提供完美的支持。
+ M( J2 n; e2 n* x  传统上Qt被认为是可移植的GUI库,但实际上Qt现在已经是一个比较完整的可移植应用程序框架了,其中包含了大量的工具,比如正则表达式、Web和 Socket类、2D和3D图形、XML解析、SQL类等,甚至还包括了一个完整的容器类库,不过其王牌还是GUI.在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。由于Trolltech对Qt采用的dual license模式,该产品既可以从开源社区获得支持,又能够赚取足够的商业利润,因此其前景也令人比较有信心。
$ j8 z. y& S  I5 x  Qt的主要技术特色是其元对象模型。Qt实际上使用的并不是标准的C++,而是标准C++的一个扩展。它通过元对象模型扩展,实现了著名的signal/slot机制,而这一机制也成为Qt的最大特色和优势。
3 j9 O2 G) `% G) v  与Qt类似的可移植GUI框架还有wxWidget、FOX等 ! m& \2 c9 A  z& S0 F
  计算机视觉
0 M' I/ H) Z+ D; l1 i  OpenCV,因特尔自主的开源库。支持C/C++/Python接口。这个感兴趣的朋友可以玩一下。如果结合OpenCV,你可以做一些外行人觉得很酷的程序。比如说用它的人脸识别函数,来对你的摄像头进行处理,判断人的动作等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 09:08:25 | 显示全部楼层

2012年软考软件设计师辅导之C++开源库介绍

 七、图形图像处理   GDAL,处理大图像。 要是GIS专业的人肯定会语言到非常大的tif影像,动则几个GB的航空影像。GDAL对大图像的读写支持是非常棒的(像多波段的图像都可以搞定)。支持C++/Java/Python…… 2 A4 }! @( l; d% _2 y# N" C4 M* g
  国外开源的GIS软件QGIS就是用了gdal 3 ~, R$ Z5 |7 C9 z+ Z& o8 J
  c的图形图像库较多,libjpeg、libpng、zlib、tiff、JBIG、最著名的开源形图像处理软件Cximage
9 `' W6 Q  e1 l# ^6 Z  八、内存管理:boost::smart_ptr,Hans-Boehm GC
1 R" J/ J5 d( E, j6 Q7 n' [  @" S& q  C/C++的内存管理是一个永恒的话题。一般来说,C++的开发者倾向于自己管理内存。然而,出乎很多C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,如果不配备自动内存管理机制,用C++编写安全可靠的大型程序是非常困难的。而Bjarne Stroustrup也曾对中国开发者建议,如果没有特别的理由,应该在大型项目中使用自动内存管理工具。因此,今天的C++开发者应当积极地学习和应用自动内存管理设施。 # N5 D' ]4 Z! }+ @8 H
  说到自动内存管理,比较轻量级的做法是boost::smart_ptr,而激进的做法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。作为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个GC,你仍然可以delete、free来自己管理内存,对于我们编程习惯的冲击比较小。 ( X, e  h8 N. y2 H
  九、密码及安全:OpenSSL   \1 \9 K, w( u6 A6 I* S% q( V1 i
  安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。可以说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,如果让开发者自己摸索,其工作量和难度达到了不现实的程度。因此必须借助可靠的相关程序库才有可能提高程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,由于安全编程固有的复杂性,即使使用penSSL,开发工作仍然是非常繁琐的。因此我们也希望能够尽快看到更简单、更易用的C/C++安全程序库。 & L0 }1 v: D3 @
  十、矩阵计算:MTL 2 g) K( P: e, m- }! H
  自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算库涌现出来。比如Blitz++、POOMA、MTL、Boost::uBLAS.而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来讲,是比较突出的一个,因此可以优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN.
8 |8 W; v! u9 M# i  S2 K6 P: m  十一、中间件 4 _$ ^( k9 [# e# _
  1、分布式对象中间件:ICE
3 f, A( y9 ^  s! K  ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA.目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。 7 v! \+ K) ?6 U9 a% |
  ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。 + [7 N, _2 y7 q6 [
  2、消息中间件:ZeroMQ,总结的几种特性如下:
7 {7 H; {; Y( H% h5 L  1) 消息系统中,它差不多是最简洁的,只是个简洁的API,有n多种语言的绑定,没有专门的服务器;
, g- b/ `$ J0 B+ V& m  2) 性能非常优越,远远高于RabbitMQ、ActiveMQ、MSMQ等; ' [/ F9 n5 }4 M1 B) r; ^) ?
  3) 适合做分布式和并发应用。
7 T0 t' x, }0 F4 @  十二、正则表达式:boost::regex 8 l. ^! h1 v( i- k
  正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。
! {9 b! a0 W9 ~3 ~8 L" K, d% v; z5 w! }
  其他可以选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 09:08:26 | 显示全部楼层

2012年软考软件设计师辅导之C++开源库介绍

</p>  十三、配置管理:Lua
- ]+ i$ h% R2 a' s1 G* f  随着软件系统越来越复杂,对软件的可配置型提出了越来越高的要求。传统上只要通过命令行参数来配置的系统,现在可能需要越来越多的方式和机制。目前越来越 受欢迎、并且得到越来越多证实的做法,是将Lua嵌入到C/C++程序中,而用Lua程序作为配置脚本。这种做法的优势是,Lua语言强大灵活,可以适应 复杂的配置要求。同时,Lua便于嵌入C/C++程序,而且编译执行速度非常快,可以说是目前解决C/C++程序配置管理问题的一个出色方案。 : j1 d% j! c5 S) X# Y
  十四、3D游戏引擎
+ @* ~* W7 g! w, F) t  1. Irrlicht
  G! N! s  c+ h0 o3 I: w" C  始于2003,次年即被评为最佳开源游戏引擎。官方支持C++和。Net,拓展语言绑定包含java,perl,ruby,python.跨平台支持,使用D3D,OpenGL以及自带API.
) @1 u$ J5 O' o  f  优点:容易上手;跨平台;自带XML解析器;大的社区; ! K+ P4 @, i3 c* P6 {
  缺点:最近开发慢下来了 0 ~9 ]  s" B' b/ \/ ]+ `/ j' U. V8 A
  2. Panda3D
# s( o' Y& d& K0 f/ a3 ]0 I  由迪斯尼开发,卡耐基-梅隆娱娱乐科技中心支持。Python是官方推荐语言。也支持C++.
3 Q/ p1 L, x5 ~! H; p3 p  优点:有用的社区;大量功能;定期开发;
+ L9 Y9 O% }! Q+ m! w; x# O  缺点:缺乏工具支持;极差的文档;
/ m0 q2 S+ Y) R4 E  3. OGRE
3 P9 k* }: B9 q  图像引擎中最好的一个。2000年立的项。推荐使用C++语言。需要非常熟悉编程才行。初学者不宜。
. x  \- m" |# ~# I# e  优点:大量功能;优异的文档;大规模的社区;活跃的开发
4 j# A$ Z) p$ t8 H" G8 r6 l0 Q) J1 r  缺点:不适合初哥;只有图像引擎
; k) \! O3 a- A: ?) F& _1 E0 h" [  4. Crystal Space * {7 Q0 ]0 s2 c- U2 v
  1997年发行,用C++编写的开源游戏引擎。推荐使用C++
# l, I; Z. y0 w* o" R# O  优点:不错的社区支持;大量功能; + a  x7 W; |6 D6 [, ?1 D0 t6 M
  缺点:难学; - r1 {  I- n  L# F7 y
  5、Delta3d
$ D: k( d5 n* t4 z/ A1 K( W  Delta3D是一款由美国海军研究学院(Naval Postgraduate School)开发的全功能游戏与仿真引擎,得到美国军方巨大的支持与丰厚的投资。该引擎应用领域极为广泛,如开发在培训、教育、娱乐行业和科学计算可视化领域等方面建模与仿真的软件。 # K, T" u3 K7 Y- G2 v; d- n
  它的标准化设计把一些知名开源软件和引擎如 Open Scene Graph(OSG), OpenDynamicsEngine (ODE), Character Animation Library (CAL3D), 还有 OpenAL融为一体。Delta3D通过对这些底层模块进行隐藏封装,整合在一起从而形成了一个使用更加方便的高级API 函数库,使得开发者在必要的时候能够使用底层函数进行二次开发。Delta3D在软件系列中,处于中间层(Middle layer)的位置上。 . m4 r- D0 g) L
  优点:适合各种3D游戏,仿真,很全面。一直在做更新。
! a+ P) J( c+ D3 F  缺点:参考资料比较少。中文文档也比较少。官方参考资料比较少。但是读源代码可以加快理解,应用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-19 23:16 , Processed in 0.364768 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表