您的位置:首页 > 编程语言 > C语言/C++

C++开源库

2015-09-12 08:27 429 查看
 

一、通用标准类

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

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

deelx (轻量级的正则表达式解析类库,国产),

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

 

二、XML解析库

TinyXml 小巧快捷,便于使用,适合做数据交换

Xerces 全功能的XML解析器

PS:三个轻型xml解析开源库:SlimXml、TinyXml、RapidXml

 

三、数据库

OTL : 我比较喜欢OTL(用于连接数据库)-----OTL 是 Oracle,
Odbc and DB2-CLI TemplateLibrary 的缩写,是一个操控关系数据库的C++模板库,它目前几乎支持所有的当前各种主流数据库

 

四、多媒体类

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

相应的c开源库有ffmpeg、mpeg4、aac、avc、libmad、mpeg1、flac、ac3、ac3、matroska著名的多媒体播放器 TCPMP 天下闻名的跨平台、嵌入式手持设备视频播放器。

 

五、网络开发类

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

2、ACE 网络编程研究首选。

ACE适合于研究,大型网络编程上效率不足,大型网游里面几乎没有用到ACE的,很多用了ACE的项目也被证明了效率不高。

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

3、有博友回复到POCO。我整理如下:

  开源C++库,称为POCO(POrtable
COmponents –可移植元件),非常方便好用。

 

六、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/...都提供完美的支持。

 

 

七.计算机视觉

OpenCV,因特尔自主的开源库。

 

七. 图形图像处理

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

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

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

 

八、内存管理: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。

 

十一、中间件

1、分布式对象中间件:ICE

ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA。目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。

ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。

2、消息中间件:ZeroMQ,总结的几种特性如下:

1)消息系统中,它差不多是最简洁的,只是个简洁的API,有n多种语言的绑定,没有专门的服务器;

2)性能非常优越,远远高于RabbitMQ、ActiveMQ、MSMQ等;

3)适合做分布式和并发应用。

 

十二、正则表达式:boost::regex

  正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。

  其他可以选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。

 

十三、配置管理:Lua

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

 

十四、3D游戏引擎:

1. Irrlicht

  始于2003,次年即被评为最佳开源游戏引擎。官方支持C++和.Net,拓展语言绑定包含java,perl,ruby,python.跨平台支持,使用D3D,OpenGL以及自带API.

  优点:容易上手;跨平台;自带XML解析器;大的社区;

  缺点:最近开发慢下来了

2. Panda3D

  由迪斯尼开发,卡耐基-梅隆娱娱乐科技中心支持。Python是官方推荐语言。也支持C++。

  优点:有用的社区;大量功能;定期开发;

  缺点:缺乏工具支持;极差的文档;

3. OGRE

  图像引擎中最好的一个。2000年立的项。推荐使用C++语言。需要非常熟悉编程才行。初学者不宜。

  优点:大量功能;优异的文档;大规模的社区;活跃的开发

  缺点:不适合初哥;只有图像引擎

4. Crystal Space

1997年发行,用C++编写的开源游戏引擎。推荐使用C++

  优点:不错的社区支持;大量功能;

  缺点:难学;

5、Delta3d

Delta3D是一款由美国海军研究学院(Naval Postgraduate School)开发的全功能游戏与仿真引擎,得到美国军方巨大的支持与丰厚的投资。该引擎应用领域极为广泛,如开发在培训、教育、娱乐行业和科学计算可视化领域等方面建模与仿真的软件。

  它的标准化设计把一些知名开源软件和引擎如 Open Scene Graph(OSG), OpenDynamicsEngine (ODE), Character Animation Library (CAL3D), 还有 OpenAL融为一体。Delta3D通过对这些底层模块进行隐藏封装,整合在一起从而形成了一个使用更加方便的高级API 函数库,使得开发者在必要的时候能够使用底层函数进行二次开发。Delta3D在软件系列中,处于中间层(Middle
layer)的位置上。

  优点:适合各种3D游戏,仿真,很全面。一直在做更新。

  缺点:参考资料比较少。中文文档也比较少。官方参考资料比较少。但是读源代码可以加快理解,应用。

tips:目前,我正在研究delta开源引擎,并利用其开发一个小型游戏。

 

三、日志操作

日志操作推荐大家熟悉 log4cpp这个日志库,支持多线程,日志重定向到网络等都有,反正你能想到的日志的功能,都有。

日志嘛,一个是方便查找问题,方便记录程序运行的一些情况。这是必须的。

 

四、管理后台

    众所周知,写程序是给其他人用的,不是自己用,所以在程序的易用性上,多给对方提供一些可以直接查看的管理界面,显得分成重要。为程序提供一个web的管理界面,方便用户登录上去查看程序的各种信息,很有必要。

我这里有一个方便的web后台管理的http实现,可以方便的集成到应用程序中。在IE里面输入监听的端口,就可以查看程序的状态。代码还没有仔细整理。有需要的弟兄可以给我留言,给大家发。

 

五、读取配置文件

     所有的程序都必须有配置文件,方便配置一些项目,为程序提供灵活性。所以写程序,必须有读取配置文件的封装类。

 

七、缓存库

     众所周知,缓存库用得最多的就是 memcache 了。在做数据库开发的时候特别有用。

 

八、脚本

     脚本是一个很有意思的东西,很多功能,其实我们只要写个脚本就可以完成,代码量少,开发速度快。

     必须掌握的脚本,比较通用的要算 perl 了,很古老的语言,但是功能太强大了。我可以保证的说,.net,java能干的工作,肯定可以让perl来干。 C能干的, perl不一定能干。 perl作为linux, unix的系统集成的脚本语言,必须学会。

     lua 语言,这个语言,在游戏行业用得比较多。不推荐学。

     python 脚本,功能很强大,推荐学。

   上面这些是所有程序都会用到的比较通用的功能。

  在不同的应用领域,需要掌握不同开源库,比如搞游戏开发的,可能需要掌握开源的UI库CEGUI, 开源的3D引擎OGRE等。

搞分布式开发的可能会有分布式的文件系统库等。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: