C++开源库

C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。由于当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下以后,MS又忽然发力,搞出C#语言,有大片的曾经的C++程序员,觉得C++要就此沉沦,未料,这三年来,C++的生命力忽然被严重地加强了。主力缘由就是开源的软件、基础软件(好比并发原生支持,好比Android一定要推出原生的SDK)、各类跨平台应用的出现。java

 

开源C++库必须具备如下特色:必须是成熟的产品、跨平台的产品、相对通用的库。mysql

 

 

1、通用标准类程序员

    STL:C++标准模板库,呵呵,它也是开源的嘛。web

    boost:C++准标准库,它是强大地,江湖称之“千锤百炼”。正则表达式

        

  deelx (轻量级的正则表达式解析类库,国产),boost里有强大的正则表达式解析库,但若是你只想要一个表达式解析,不想要拖上庞大的boost库时……支持一下国货。算法

iconv /iconvpp : (C形式的编码转换函数库,sql

 

2、XML解析库数据库

C++的XML相关库很多,可是大部分其实都是C库,使用起来天然不那么轻便。其中基于DOM的有TinyXml,基于SAX的固然是Xerces。前者小巧快捷,便于使用,适合作数据交换。后者则是全功能的XML解析器。编程

xerces-c :最强大的XML解析库了,不是仅仅在开源库里,你尽管把商业的算在内。固然,它的变体,被IBM拿去卖钱的那个版本,多了数百兆的东东来支持各国编码转换,是更强大,但我以为有小小的,开源的iconv在前不就够了?设计模式

 

xml相应的c开源库有expat,基于SAX,应用普遍。

 

   xsd (XML 与 C++数据结构的绑定工具)。(商业使用要钱)

3、数据库

    mysql / mysql++: 不用介绍吧。如今Oracle手里,但我很放心。

 

 

4、多媒体类

   

 SDL (Simple DirectMedia Layer/多媒体直接访问层,用于游戏编程)。

相应的c开源库有ffmpeg、mpeg四、aac、avc、libmad、mpeg一、flac、ac三、ac三、matroska著名的多媒体播放器 TCPMP  天下闻名的跨平台、嵌入式手持设备视频播放器,

 

5、网络开发类

    gSOAP SOAP协议的C++支持库及代码生成工具。

 

ACE   大型网络编程的首选库。

除了ACE以外,还有不少系统和网络编程方面的程序库。好比在线程库方面,还有ZThread、boost::thread,若是放大到C/C++领域,还有APR,还有CII。在文件和目录操做方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,将来的 C++0X中几乎确定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不可是一个实用的程序库、框架集,仍是一个典范的设计模式应用范例,很是值得学习。

6、GUI库

    BCG  Windows平台下界面设计的第三方库,可让你的界面更美好,更具时  代感。

 

wxWidgets :使用wxWidgets ,开发者能够基于同一套代码,为Win32, Mac OS X, GTK+, X11, Motif, WinCE等平台开发应用程序。wxWidgets库能够被C++, Python, Perl, and C#/.NET等开发语言使用。跟其它有些一样支持跨平台GUI开发工具不一样,基于wxWidgets的应用,拥有真实本地化的视觉及使用效果——由于,wxWidgets使用(各)平台原生的控件,而不是简单经过贴图去模拟。wxWidgets是使用普遍的,自由的,开源的,成熟的。

QT-------------界面(GUI)开发,支持C++/Java/Python/...多种语言。跨平台。最主要的好处是,API很是优美!Qt自己也不只仅只是作GUI编程,实际它基本上能够作OS-API能够作的任何事情。象网络/数据库/OpenGL/...都提供完美的支持。

   传统上Qt被认为是可移植的GUI库,但实际上Qt如今已是一个比较完整的可移植应用程序框架了,其中包含了大量的工具,好比正则表达式、Web和 Socket类、2D和3D图形、XML解析、SQL类等,甚至还包括了一个完整的容器类库,不过其王牌仍是GUI。在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。因为Trolltech对Qt采用的dual license模式,该产品既能够从开源社区得到支持,又可以赚取足够的商业利润,所以其前景也使人比较有信心。
    Qt的主要技术特点是其元对象模型。Qt实际上使用的并非标准的C++,而是标准C++的一个扩展。它经过元对象模型扩展,实现了著名的signal/slot机制,而这一机制也成为Qt的最大特点和优点。
    与Qt相似的可移植GUI框架还有wxWidget、FOX等

六. 计算机视觉

  OpenCV,因特尔自主的开源库。支持C/C++/Python接口。这个感兴趣的朋友能够玩一下。若是结合OpenCV,你能够作一些外行人以为很酷的程序。好比说用它的人脸识别函数,来对你的摄像头进行处理,判断人的动做等

七. 图形图像处理

GDAL,处理大图像。 要是GIS专业的人确定会语言到很是大的tif影像,动则几个GB的航空影像。GDAL对大图像的读写支持是很是棒的(像多波段的图像均可以搞定)。  支持C++/Java/Python...

国外开源的GIS软件QGIS就是用了gdal

c的图形图像库较多,libjpeg、libpng、zlib、tiff、JBIG、最著名的开源形图像处理软件Cximage

8、内存管理:boost::smart_ptr,Hans-Boehm GC
    C/C++的内存管理是一个永恒的话题。通常来讲,C++的开发者倾向于本身管理内存。然而,出乎不少C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,若是不配备自动内存管理机制,用C++编写安全可靠的大型程序是很是困难的。而Bjarne Stroustrup也曾对中国开发者建议,若是没有特别的理由,应该在大型项目中使用自动内存管理工具。所以,今天的C++开发者应当积极地学习和应用自动内存管理设施。
    说到自动内存管理,比较轻量级的作法是boost::smart_ptr,而激进的作法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。做为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个GC,你仍然能够delete、free来本身管理内存,对于咱们编程习惯的冲击比较小。

、密码及安全:OpenSSL
    安全是今天进行C/C++编程没法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。能够说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,若是让开发者本身摸索,其工做量和难度达到了不现实的程度。所以必须借助可靠的相关程序库才有可能提升程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,因为安全编程固有的复杂性,即便使用penSSL,开发工做仍然是很是繁琐的。所以咱们也但愿可以尽快看到更简单、更易用的C/C++安全程序库。

、矩阵计算:MTL
   
 自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算库涌现出来。好比Blitz++、POOMA、MTL、Boost::uBLAS。而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来说,是比较突出的一个,所以能够优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN。

十一、分布式对象中间件:ICE
   
 ICE是分布式对象中间件领域里的后起之秀,能够大体地将其视为“改进版”的CORBA。目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军做战系统。
    ICE的一个特别价值是其代码的范例意义。因为ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,因此成为了研读C++代码的良好目标。

十二、正则表达式:boost::regex
   
 正则表达式是编程工做中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。可是最初的regex不管在效率上仍是可靠性方面都有一些问题,后来通过一次大规模的翻修以后,达到了比较完善的程度。
    其余能够选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。

十三、配置管理:Lua随着软件系统愈来愈复杂,对软件的可配置型提出了愈来愈高的要求。传统上只要经过命令行参数来配置的系统,如今可能须要愈来愈多的方式和机制。目前愈来愈受欢迎、而且获得愈来愈多证明的作法,是将Lua嵌入到C/C++程序中,而用Lua程序做为配置脚本。这种作法的优点是,Lua语言强大灵活,能够适应复杂的配置要求。同时,Lua便于嵌入C/C++程序,并且编译执行速度很是快,能够说是目前解决C/C++程序配置管理问题的一个出色方案。

相关文章
相关标签/搜索