開(kāi)源C++庫必須具有以下特點(diǎn):必須是成熟的產(chǎn)品、跨平臺的產(chǎn)品、相對通用的庫。
一、通用標準類(lèi)
STL:C++標準模板庫,呵呵,它也是開(kāi)源的嘛。
boost:C++準標準庫,它是強大地,江湖稱(chēng)之“千錘百煉”。
deelx (輕量級的正則表達式解析類(lèi)庫,國產(chǎn)),boost里有強大的正則表達式解析庫,但如果你只想要一個(gè)表達式解析,不想要拖上龐大的boost庫時(shí)……支持一下國貨。
iconv /iconvpp : (C形式的編碼轉換函數庫,
二、XML解析庫
C++的XML相關(guān)庫不少,但是大部分其實(shí)都是C庫,使用起來(lái)自然不那么輕便。其中基于DOM的有TinyXml,基于SAX的當然是Xerces。前者小巧快捷,便于使用,適合做數據交換。后者則是全功能的XML解析器。
xerces-c :最強大的XML解析庫了,不是僅僅在開(kāi)源庫里,你盡管把商業(yè)的算在內。當然,它的變體,被IBM拿去賣(mài)錢(qián)的那個(gè)版本,多了數百兆的東東來(lái)支持各國編碼轉換,是更強大,但我覺(jué)得有小小的,開(kāi)源的iconv在前不就夠了?
xml相應的c開(kāi)源庫有expat,基于SAX,應用廣泛。
xsd (XML 與 C++數據結構的綁定工具)。(商業(yè)使用要錢(qián))
三、數據庫
mysql / mysql++: 不用介紹吧?,F在Oracle手里,但我很放心。
四、多媒體類(lèi)
來(lái)源:(http://blog.sina.com.cn/s/blog_56fdaf150100hgf5.html) - C++開(kāi)源庫_kieven2008_新浪博客
SDL (Simple DirectMedia Layer/多媒體直接訪(fǎng)問(wèn)層,用于游戲編程)。
相應的c開(kāi)源庫有ffmpeg、mpeg4、aac、avc、libmad、mpeg1、flac、ac3、ac3、matroska著(zhù)名的多媒體播放器 TCPMP 天下聞名的跨平臺、嵌入式手持設備視頻播放器,
五、網(wǎng)絡(luò )開(kāi)發(fā)類(lèi)
gSOAP SOAP協(xié)議的C++支持庫及代碼生成工具。
ACE 大型網(wǎng)絡(luò )編程的首選庫。
除了ACE之外,還有很多系統和網(wǎng)絡(luò )編程方面的程序庫。比如在線(xiàn)程庫方面,還有ZThread、boost::thread,如果放大到C/C++ 領(lǐng)域,還有APR,還有CII。在文件和目錄操作方面,boost也有相應的組件,而在網(wǎng)絡(luò )編程方面有socket++,還有boost::asio,未來(lái)的 C++0X中幾乎肯定有一個(gè)網(wǎng)絡(luò )編程和一個(gè)線(xiàn)程庫。然而目前看來(lái),ACE仍然是進(jìn)行系統和高性能網(wǎng)絡(luò )編程的首選,其地位在一段時(shí)間內不會(huì )被撼動(dòng)。它不但是一個(gè)實(shí)用的程序庫、框架集,還是一個(gè)典范的設計模式應用范例,非常值得學(xué)習。
六、GUI庫
BCG Windows平臺下界面設計的第三方庫,可以讓你的界面更美好,更具時(shí) 代感。
wxWidgets :使用wxWidgets ,開(kāi)發(fā)者可以基于同一套代碼,為Win32, Mac OS X, GTK+, X11, Motif, WinCE等平臺開(kāi)發(fā)應用程序。wxWidgets庫可以被C++, Python, Perl, and C#/.NET等開(kāi)發(fā)語(yǔ)言使用。跟其它有些同樣支持跨平臺GUI開(kāi)發(fā)工具不同,基于wxWidgets的應用,擁有真實(shí)本地化的視覺(jué)及使用效果——因為,wxWidgets使用(各)平臺原生的控件,而不是簡(jiǎn)單通過(guò)貼圖去模擬。wxWidgets是使用廣泛的,自由的,開(kāi)源的,成熟的。
QT-------------界面(GUI)開(kāi)發(fā),支持C++/Java/Python/...多種語(yǔ)言??缙脚_。最主要的好處是,API非常優(yōu)美!Qt本身也不僅僅只是做GUI編程,實(shí)際它基本上可以做OS-API可以做的任何事情。象網(wǎng)絡(luò )/數據庫/OpenGL/...都提供完美的支持。
傳統上Qt被認為是可移植的GUI庫,但實(shí)際上Qt現在已經(jīng)是一個(gè)比較完整的可移植應用程序框架了,其中包含了大量的工具,比如正則表達式、Web和 Socket類(lèi)、2D和3D圖形、XML解析、SQL類(lèi)等,甚至還包括了一個(gè)完整的容器類(lèi)庫,不過(guò)其王牌還是GUI。在目前的跨平臺GUI框架中,Qt成熟度最高,已經(jīng)被一些大公司應用在關(guān)鍵產(chǎn)品中。由于Trolltech對Qt采用的dual license模式,該產(chǎn)品既可以從開(kāi)源社區獲得支持,又能夠賺取足夠的商業(yè)利潤,因此其前景也令人比較有信心。
Qt的主要技術(shù)特色是其元對象模型。Qt實(shí)際上使用的并不是標準的C++,而是標準C++的一個(gè)擴展。它通過(guò)元對象模型擴展,實(shí)現了著(zhù)名的signal/slot機制,而這一機制也成為Qt的最大特色和優(yōu)勢。
與Qt類(lèi)似的可移植GUI框架還有wxWidget、FOX等
六. 計算機視覺(jué)
OpenCV,因特爾自主的開(kāi)源庫。支持C/C++/Python接口。這個(gè)感興趣的朋友可以玩一下。如果結合OpenCV,你可以做一些外行人覺(jué)得很酷的程序。比如說(shuō)用它的人臉識別函數,來(lái)對你的攝像頭進(jìn)行處理,判斷人的動(dòng)作等
七. 圖形圖像處理
GDAL,處理大圖像?!∫荊IS專(zhuān)業(yè)的人肯定會(huì )語(yǔ)言到非常大的tif影像,動(dòng)則幾個(gè)GB的航空影像。GDAL對大圖像的讀寫(xiě)支持是非常棒的(像多波段的圖像都可以搞定)?! ≈С諧++/Java/Python...
國外開(kāi)源的GIS軟件QGIS就是用了gdal
c的圖形圖像庫較多,libjpeg、libpng、zlib、tiff、JBIG、最著(zhù)名的開(kāi)源形圖像處理軟件Cximage
八、內存管理:boost::smart_ptr,Hans-Boehm GC
C/C++的內存管理是一個(gè)永恒的話(huà)題。一般來(lái)說(shuō),C++的開(kāi)發(fā)者傾向于自己管理內存。然而,出乎很多C++開(kāi)發(fā)者意料的是,近期C++的一些領(lǐng)袖人物已經(jīng)公開(kāi)宣稱(chēng),如果不配備自動(dòng)內存管理機制,用C++編寫(xiě)安全可靠的大型程序是非常困難的。而B(niǎo)jarne Stroustrup也曾對中國開(kāi)發(fā)者建議,如果沒(méi)有特別的理由,應該在大型項目中使用自動(dòng)內存管理工具。因此,今天的C++開(kāi)發(fā)者應當積極地學(xué)習和應用自動(dòng)內存管理設施。
說(shuō)到自動(dòng)內存管理,比較輕量級的做法是boost::smart_ptr,而激進(jìn)的做法是引入完整的GC機制。目前開(kāi)源而又比較可靠的GC中,Hans- Boehm GC無(wú)疑是最受信賴(lài)的。作為一個(gè)保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特別是,使用這個(gè)GC,你仍然可以delete、free來(lái)自己管理內存,對于我們編程習慣的沖擊比較小。
九、密碼及安全:OpenSSL
安全是今天進(jìn)行C/C++編程無(wú)法回避和必須重視的問(wèn)題。然而編寫(xiě)安全的應用程序,特別是跟網(wǎng)絡(luò )相關(guān)的C/C++應用程序,是一件十分困難的事情??梢哉f(shuō),整個(gè)業(yè)界目前在這個(gè)進(jìn)程上仍然處于“初級階段”。特別是涉及到大量的安全、密碼學(xué)相關(guān)的算法、規范,如果讓開(kāi)發(fā)者自己摸索,其工作量和難度達到了不現實(shí)的程度。因此必須借助可靠的相關(guān)程序庫才有可能提高程序的安全性。在這方面,OpenSSL是目前最好的選擇,其內容之全面可靠,已經(jīng)成為業(yè)界標桿。然而,由于安全編程固有的復雜性,即使使用penSSL,開(kāi)發(fā)工作仍然是非常繁瑣的。因此我們也希望能夠盡快看到更簡(jiǎn)單、更易用的C/C++安全程序庫。
十、矩陣計算:MTL
自1995年以來(lái),C++在科學(xué)計算領(lǐng)域當中取得了巨大的突破。這主要歸功于template技術(shù)的高級應用,使得C++在科學(xué)計算的性能方面取得了巨大的進(jìn)步,一大批優(yōu)秀的C++科學(xué)計算庫涌現出來(lái)。比如Blitz++、POOMA、MTL、Boost::uBLAS。而這其中,MTL就功能豐富程度、性能、開(kāi)發(fā)支持和成熟程度來(lái)講,是比較突出的一個(gè),因此可以?xún)?yōu)先考慮。值得一提的是,2002年,MTL與后來(lái)被Intel收購的KAI C++配合,曾經(jīng)在性能評測中擊敗了FORTRAN。
十一、分布式對象中間件:ICE
ICE是分布式對象中間件領(lǐng)域里的后起之秀,可以大致地將其視為“改進(jìn)版”的CORBA。目前應用在一些大型項目當中,其中包括波音公司主持的下一代陸軍作戰系統。
ICE的一個(gè)特別價(jià)值是其代碼的范例意義。由于ICE的出現較晚,開(kāi)發(fā)者比較系統地應用了新的C++編程風(fēng)格,所以成為了研讀C++代碼的良好目標。
十二、正則表達式:boost::regex
正則表達式是編程工作中最強有力的工具之一。C++的正則表達式支持一直以來(lái)是一個(gè)軟肋。大約在2001年左右,boost中出現了regex庫,初步解決了這個(gè)問(wèn)題。但是最初的regex無(wú)論在效率上還是可靠性方面都有一些問(wèn)題,后來(lái)經(jīng)過(guò)一次大規模的翻修之后,達到了比較完善的程度。
其他可以選擇的替代品還有C語(yǔ)言的pcre庫,Qt中的QRegExp類(lèi)等。
十三、配置管理:Lua
隨著(zhù)軟件系統越來(lái)越復雜,對軟件的可配置型提出了越來(lái)越高的要求。傳統上只要通過(guò)命令行參數來(lái)配置的系統,現在可能需要越來(lái)越多的方式和機制。目前越來(lái)越受歡迎、并且得到越來(lái)越多證實(shí)的做法,是將Lua嵌入到C/C++程序中,而用Lua程序作為配置腳本。這種做法的優(yōu)勢是,Lua語(yǔ)言強大靈活,可以適應復雜的配置要求。同時(shí),Lua便于嵌入C/C++程序,而且編譯執行速度非???,可以說(shuō)是目前解決C/C++程序配置管理問(wèn)題的一個(gè)出色方案。
聯(lián)系客服