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++程序配置管理問題的一個出色方案。

相關文章
相關標籤/搜索