原文地址:http://www.open-open.com/bbs/view/1323401558374
1、C++各大有名庫的介紹——C++標準庫
2、C++各大有名庫的介紹——準標準庫Boost3、C++各大有名庫的介紹——GUI
4、C++各大有名庫的介紹——網絡通信
5、C++各大有名庫的介紹——XML
6、C++各大有名庫的介紹——科學計算
7、C++各大有名庫的介紹——遊戲開發
8、C++各大有名庫的介紹——線程
9、C++各大有名庫的介紹——序列化
10、C++各大有名庫的介紹——字符串
11、C++各大有名庫的介紹——綜合
12、C++各大有名庫的介紹——其他庫
13、C++名人的網站
在 C++中,庫的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了設計庫來擴充功能要好過設計更多的語法的言論。現實中,C++的庫門類繁多,解決的問題也是極其廣泛,庫從輕量級到重 量級的都有。不少都是讓人眼界大開,亦或是望而生嘆的思維傑作。由於庫的數量非常龐大,而且限於筆者水平,其中很多並不瞭解。所以文中所提的一些庫都是比 較著名的大型庫。
1、C++各大有名庫的介紹——C++標準庫
標準庫中提供了C++程序的基本設施。雖然C++標準庫隨着C++標準折騰了許多年,直到標準的出臺才正式定型,但是在標準庫的實現上卻很令人欣慰得看到多種實現,並且已被實踐證明爲有工業級別強度的佳作。
1.1、Dinkumware C++ Library
參考站點:http://www.dinkumware.com/
P.J. Plauger編寫的高品質的標準庫。P.J. Plauger博士是Dr. Dobb's程序設計傑出獎的獲得者。其編寫的庫長期被Microsoft採用,並且最近Borland也取得了其OEM的license,在其 C/C++的產品中採用Dinkumware的庫。
1.2、RogueWave Standard C++ Library
參考站點:http://www.roguewave.com/
這個庫在Borland C++ Builder的早期版本中曾經被採用,後來被其他的庫給替換了。筆者不推薦使用。
1.3、SGI STL
參考站點:http://www.roguewave.com/
SGI公司的C++標準模版庫。
1.4、STLport
參考站點:http://www.stlport.org/
SGI STL庫的跨平臺可移植版本。
2、C++各大有名庫的介紹——準標準庫Boost
Boost庫是一個經過千錘百煉、可移植、提供源代碼的C++庫,作爲標準庫的後備,是C++標準化進程的發動機之一。 Boost庫由C++標準委員會庫工作組成員發起,在C++社區中影響甚大,其成員已近2000人。 Boost庫爲我們帶來了最新、最酷、最實用的技術,是不折不扣的“準”標準庫。
Boost中比較有名氣的有這麼幾個庫:
2.1 Regex 正則表達式庫
2.2 Spirit LL parser framework,用C++代碼直接表達EBNF
2.3 Graph 圖組件和算法
2.4 Lambda 在調用的地方定義短小匿名的函數對象,很實用的functional功能
2.5 concept check 檢查泛型編程中的concept
2.6 Mpl 用模板實現的元編程框架
2.7 Thread 可移植的C++多線程庫
2.8 Python 把C++類和函數映射到Python之中
2.9 Pool 內存池管理
2.10 smart_ptr 5個智能指針,學習智能指針必讀,一份不錯的參考是來自CUJ的文章:
Smart Pointers in Boost,哦,這篇文章可以查到,CUJ是提供在線瀏覽的。中文版見筆者在《Dr.Dobb's Journal軟件研發雜誌》第7輯上的譯文。
Boost總體來說是實用價值很高,質量很高的庫。並且由於其對跨平臺的強調,對標準C++的強調,是編寫平臺無關,現代C++的開發者必備的 工具。但是Boost中也有很多是實驗性質的東西,在實際的開發中實用需要謹慎。並且很多Boost中的庫功能堪稱對語言功能的擴展,其構造用盡精巧的手 法,不要貿然的花費時間研讀。Boost另外一面,比如Graph這樣的庫則是具有工業強度,結構良好,非常值得研讀的精品代碼,並且也可以放心的在產品 代碼中多多利用。
參考站點:http://www.boost.org
3、C++各大有名庫的介紹——GUI
在衆多C++的庫中,GUI部分的庫算是比較繁榮,也比較引人注目的。在實際開發中,GUI庫的選擇也是非常重要的一件事情,下面我們綜述一下可選擇的GUI庫,各自的特點以及相關工具的支持。
3.1、MFC
大名鼎鼎的微軟基礎類庫(Microsoft Foundation Class)。大凡學過VC++的人都應該知道這個庫。雖然從技術角度講,MFC是不大漂亮的,但是它構建於Windows API 之上,能夠使程序員的工作更容易,編程效率高,減少了大量在建立 Windows 程序時必須編寫的代碼,同時它還提供了所有一般 C++ 編程的優點,例如繼承和封裝。MFC 編寫的程序在各個版本的Windows操作系統上是可移植的,例如,在Windows 3.1下編寫的代碼可以很容易地移植到 Windows NT 或 Windows 95 上。但是在最近發展以及官方支持上日漸勢微。
3.2、QT
參考網站:http://www.trolltech.com
Qt是Trolltech公司的一個多平臺的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功 能。Qt是完全面向對象的很容易擴展,並且允許真正地組件編程。自從1996年早些時候,Qt進入商業領域,它已經成爲全世界範圍內數千種成功的應用程序 的基礎。Qt也是流行的Linux桌面環境KDE 的基礎,同時它還支持Windows、Macintosh、Unix/X11等多種平臺。[wangxinus注:QT目前已經是Nokia旗下的產品,原官方網站已經失效,目前爲http://qt.nokia.com.2009年初發布的Qt4.5版本開始使用LGPL協議,諾基亞希望以此來吸引更多的開發人員使用Qt庫]
3.3、WxWindows
參考網站:http://www.wxwindows.org
跨平臺的GUI庫。因爲其類層次極像MFC,所以有文章介紹從MFC到WxWindows的代碼移植以實現跨平臺的功能。通過多年的開發也是一個日趨完善的GUI庫,支持同樣不弱於前面兩個庫。並且是完全開放源代碼的。新近的C++ Builder X的GUI設計器就是基於這個庫的。[wangxinus注:迫於微軟的施壓,已經由WxWindows更名爲wxWidgets]
3.4、Fox
參考網站:http://www.fox-toolkit.org/
開放源代碼的GUI庫。作者從自己親身的開發經驗中得出了一個理想的GUI庫應該是什麼樣子的感受出發,從而開始了對這個庫的開發。有興趣的可以嘗試一下。
3.5、WTL
基於ATL的一個庫。因爲使用了大量ATL的輕量級手法,模板等技術,在代碼尺寸,以及速度優化方面做得非常到位。主要面向的使用羣體是開發COM輕量級供網絡下載的可視化控件的開發者。
3.6、GTK
參考網站:http://gtkmm.sourceforge.net/
GTK是一個大名鼎鼎的C的開源GUI庫。在Linux世界中有Gnome這樣的殺手應用。而Qt就是這個庫的C++封裝版本。[wangxinus注:“Qt 就是這個庫的C++封裝版本”是錯誤的。Qt早於GTK,最初Qt由於協議的原因引起社區的不滿,另外開發了一個基於C語言的GTK庫,後面的擴展版本爲 GTK+。GTK+的Gnome和Qt的KDE是目前linux桌面的兩大陣營,曾有水火不容之勢。目前雙方都以及開源社區的精神,已經和解。]
4、C++各大有名庫的介紹——網絡通信
4.1、ACE
參考網站:http://www.cs.wustl.edu/~schmidt/ACE.html
C++庫的代表,超重量級的網絡通信開發框架。ACE自適配通信環境(Adaptive Communication Environment)是可以自由使用、開放源代碼的面向對象框架,在其中實現了許多用於併發通信軟件的核心模式。ACE提供了一組豐富的可複用C++ 包裝外觀(Wrapper Facade)和框架組件,可跨越多種平臺完成通用的通信軟件任務,其中包括:事件多路分離和事件處理器分派、信號處理、服務初始化、進程間通信、共享內存管理、消息路由、分佈式服務動態(重)配置、併發執行和同步,等等。
4.2、StreamModule
參考網站:http://www.omnifarious.org/StrMod
設計用於簡化編寫分佈式程序的庫。嘗試着使得編寫處理異步行爲的程序更容易,而不是用同步的外殼包起異步的本質。
4.3、SimpleSocket
參考網站:http://home.hetnet.nl/~lcbokkers/simsock.htm
這個類庫讓編寫基於socket的客戶/服務器程序更加容易。
4.4、A Stream Socket API for C++
參考網站:http://www.pcs.cnu.edu/~dgame/sockets/socketsC++/sockets.html
又一個對Socket的封裝庫。
5、C++各大有名庫的介紹——XML
5.1、Xerces
參考網站:http://xml.apache.org/xerces-c/
Xerces-C++ 是一個非常健壯的XML解析器,它提供了驗證,以及SAX和DOM API。XML驗證在文檔類型定義(Document Type Definition,DTD)方面有很好的支持,並且在2001年12月增加了支持W3C XMLSchema 的基本完整的開放標準。
5.2、XMLBooster
參考網站:http://www.xmlbooster.com/
這個庫通過產生特製的parser的辦法極大的提高了XML解析的速度,並且能夠產生相應的GUI程序來修改這個parser。在DOM和SAX兩大主流XML解析辦法之外提供了另外一個可行的解決方案。
5.3、Pull Parser
參考網站:http://www.extreme.indiana.edu/xgws/xsoap/xpp
這個庫採用pull方法的parser。在每個SAX的parser底層都有一個pull的parser,這個xpp把這層暴露出來直接給大家使用。在要充分考慮速度的時候值得嘗試。
5.4、Xalan
參考網站:http://xml.apache.org/xalan-c/
Xalan是一個用於把XML文檔轉換爲HTML,純文本或者其他XML類型文檔的XSLT處理器。
5.5、CMarkup
參考網站:http://www.firstobject.com/xml.htm
這是一種使用EDOM的XML解析器。在很多思路上面非常靈活實用。值得大家在DOM和SAX之外尋求一點靈感。
5.6、libxml++
http://libxmlplusplus.sourceforge.net/
libxml++是對著名的libxml XML解析器的C++封裝版本。
5.7. TinyXML [wangxinus注:一個非常小巧的XML解析庫,基於DOM的。]
6、C++各大有名庫的介紹——科學計算
6.1、Blitz++
參考網站:http://www.oonumerics.org/blitz
Blitz++ 是一個高效率的數值計算函數庫,它的設計目的是希望建立一套既具像C++ 一樣方便,同時又比Fortran速度更快的數值計算環境。通常,用C++所寫出的數值程序,比 Fortran慢20%左右,因此Blitz++正是要改掉這個缺點。方法是利用C++的template技術,程序執行甚至可以比Fortran更快。
Blitz++目前仍在發展中,對於常見的SVD,FFTs,QMRES等常見的線性代數方法並不提供,不過使用者可以很容易地利用Blitz++所提供的函數來構建。
6.2、POOMA
參考網站:http://www.codesourcery.com/pooma/pooma
POOMA是一個免費的高性能的C++庫,用於處理並行式科學計算。POOMA的面向對象設計方便了快速的程序開發,對並行機器進行了優化以達到最高的效率,方便在工業和研究環境中使用。
6.3、MTL
參考網站:http://www.osl.iu.edu/research/mtl
Matrix Template Library(MTL)是一個高性能的泛型組件庫,提供了各種格式矩陣的大量線性代數方面的功能。在某些應用使用高性能編譯器的情況下,比如Intel的編譯器,從產生的彙編代碼可以看出其與手寫幾乎沒有兩樣的效能。
6.4、CGAL
參考網站:www.cgal.org
Computational Geometry Algorithms Library的目的是把在計算幾何方面的大部分重要的解決方案和方法以C++庫的形式提供給工業和學術界的用戶。
7、C++各大有名庫的介紹——遊戲開發
7.1、Audio/Video 3D C++ Programming Library
參考網站:http://www.galacticasoftware.com/products/av/
AV3D是一個跨平臺,高性能的C++庫。主要的特性是提供3D圖形,聲效支持(SB,以及S3M),控制接口(鍵盤,鼠標和遙感),XMS。
7.2、KlayGE
參考網站:http://home.g365.net/enginedev/
國內遊戲開發高手自己用C++開發的遊戲引擎。KlayGE是一個開放源代碼、跨平臺的遊戲引擎,並使用Python作腳本語言。KlayGE在LGPL協議下發行。感謝龔敏敏先生爲中國遊戲開發事業所做出的貢獻。
[wangxinus注:這個庫國人瞭解很少,百度百科的KlayGE詞條還是本人創建的。一個人開發一個遊戲引擎庫,是在讓筆者汗顏,對作者表示欽佩!]
7.3、OGRE
參考網站:http://www.ogre3d.org
OGRE(面向對象的圖形渲染引擎)是用C++開發的,使用靈活的面向對象3D引擎。它的目的是讓開發者能更方便和直接地開發基於3D硬件設備 的應用程序或遊戲。引擎中的類庫對更底層的系統庫(如:Direct3D和OpenGL)的全部使用細節進行了抽象,並提供了基於現實世界對象的接口和其 它類。
8、C++各大有名庫的介紹——線程
8.1、C++ Threads
參考網站:http://threads.sourceforge.net/
這個庫的目標是給程序員提供易於使用的類,這些類被繼承以提供在Linux環境中很難看到的大量的線程方面的功能。
8.2、ZThreads
參考網站:http://zthread.sourceforge.net/
一個先進的面向對象,跨平臺的C++線程和同步庫。
9、C++各大有名庫的介紹——序列化
9.1、s11n
參考網站:http://s11n.net/
一個基於STL的C++庫,用於序列化POD,STL容器以及用戶定義的類型。
9.2、Simple XML Persistence Library
參考網站:http://sxp.sourceforge.net/
這是一個把對象序列化爲XML的輕量級的C++庫。
10、C++各大有名庫的介紹——字符串
10.1、C++ Str Library
參考網站:http://www.utilitycode.com/str/
操作字符串和字符的庫,支持Windows和支持gcc的多種平臺。提供高度優化的代碼,並且支持多線程環境和Unicode,同時還有正則表達式的支持。
10.2、Common Text Transformation Library
參考網站:http://cttl.sourceforge.net/
這是一個解析和修改STL字符串的庫。CTTL substring類可以用來比較,插入,替換以及用EBNF的語法進行解析。
10.3、GRETA
參考網站:http://research.microsoft.com/projects/greta/
這是由微軟研究院的研究人員開發的處理正則表達式的庫。在小型匹配的情況下有非常優秀的表現。
11、C++各大有名庫的介紹——綜合
11.1、P::Classes
參考網站:http://pclasses.com/
一個高度可移植的C++應用程序框架。當前關注類型和線程安全的signal/slot機制,i/o系統包括基於插件的網絡協議透明的i/o架構,基於插件的應用程序消息日誌框架,訪問sql數據庫的類等等。
11.2、ACDK - Artefaktur Component Development Kit
參考網站:http://acdk.sourceforge.net/
這是一個平臺無關的C++組件框架,類似於Java或者.NET中的框架(反射機制,線程,Unicode,廢料收集,I/O,網絡,實用工具,XML,等等),以及對Java, Perl, Python, TCL, Lisp, COM 和 CORBA的集成。
11.3、dlib C++ library
參考網站:http://www.cis.ohio-state.edu/~kingd/dlib/
各種各樣的類的一個綜合。大整數,Socket,線程,GUI,容器類,以及瀏覽目錄的API等等。
11.4、Chilkat C++ Libraries
參考網站:http://www.chilkatsoft.com/cpp_libraries.asp
這是提供zip,e-mail,編碼,S/MIME,XML等方面的庫。
11.5、C++ Portable Types Library (PTypes)
參考網站:http://www.melikyan.com/ptypes/
這是STL的比較簡單的替代品,以及可移植的多線程和網絡庫。
11.6、LFC
參考網站:http://lfc.sourceforge.net/
哦,這又是一個嘗試提供一切的C++庫
12、C++各大有名庫的介紹——其他庫
12.1、Loki
參考網站:http://www.moderncppdesign.com/
哦,你可能抱怨我早該和Boost一起介紹它,一個實驗性質的庫。作者在loki中把C++模板的功能發揮到了極致。並且嘗試把類似設計模式這樣思想層面的東西通過庫來提供。同時還提供了智能指針這樣比較實用的功能。
12.2、ATL
ATL(Active Template Library)是一組小巧、高效、靈活的類,這些類爲創建可互操作的COM組件提供了基本的設施。
12.3、FC++: The Functional C++ Library
這個庫提供了一些函數式語言中才有的要素。屬於用庫來擴充語言的一個代表作。如果想要在OOP之外尋找另一分的樂趣,可以去看看函數式程序設計的世界。大師Peter Norvig在 “Teach Yourself Programming in Ten Years”一文中就將函數式語言列爲至少應當學習的6類編程語言之一。
12.4、FACT!
參考網站:http://www.kfa-juelich.de/zam/FACT/start/index.html
另外一個實現函數式語言特性的庫
12.5、Crypto++
提供處理密碼,消息驗證,單向hash,公匙加密系統等功能的免費庫。
還有很多非常激動人心或者是極其實用的C++庫,限於我們的水平以及文章的篇幅不能包括進來。在對於這些已經包含近來的庫的介紹中,由於並不是每一個我們都使用過,所以難免有偏頗之處,請讀者見諒。
13、C++名人的網站
正如我們可以通過計算機歷史上的重要人物瞭解計算機史的發展,C++相關人物的網站也可以使我們得到最有價值的參考與借鑑,下面的人物我們認爲沒 有介紹的必要,只因下面的人物在C++領域的地位衆所周知,我們只將相關的資源進行羅列以供讀者學習,他們有的工作于貝爾實驗室,有的工作於知名編譯器廠 商,有的在不斷推進語言的標準化,有的爲讀者撰寫了多部千古奇作……
1、Bjarne Stroustrup
http://www.research.att.com/~bs/
2、Stanley B. Lippman
http://blogs.msdn.com/slippman/ (中文版)
http://www.zengyihome.net/slippman/index.htm
3、Scott Meyers
http://www.aristeia.com/
4、David Musser
http://www.cs.rpi.edu/~musser/
5、Bruce Eckel
http://www.bruceeckel.com
http://blog.csdn.net/beckel Bruce Eckel 博客中文版
6、Nicolai M. Josuttis
http://www.josuttis.com/
7、Herb Sutter
http://www.gotw.ca/
http://blog.csdn.net/hsutter/ Herb Sutter 中文博客
8、Andrei Alexandrescu
http://www.moderncppdesign.com
附錄:C++資源大全
標準庫
C++標準庫,包括了STL容器,算法和函數等。
- C++ Standard Library:是一系列類和函數的集合,使用核心語言編寫,也是C++ISO自身標準的一部分。
- Standard Template Library:標準模板庫
- C POSIX library : POSIX系統的C標準庫規範
- ISO C++ Standards Committee :C++標準委員會
框架
C++通用框架和庫
- Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本組件的集合
- ASL :Adobe源代碼庫提供了同行的評審和可移植的C++源代碼庫。
- Boost :大量通用C++庫的集合。
- BDE :來自於彭博資訊實驗室的開發環境。
- Cinder:提供專業品質創造性編碼的開源開發社區。
- Cxxomfort:輕量級的,只包含頭文件的庫,將C++ 11的一些新特性移植到C++03中。
- Dlib:使用契約式編程和現代C++科技設計的通用的跨平臺的C++庫。
- EASTL :EA-STL公共部分
- ffead-cpp :企業應用程序開發框架
- Folly:由Facebook開發和使用的開源C++庫
- JUCE :包羅萬象的C++類庫,用於開發跨平臺軟件
- libPhenom:用於構建高性能和高度可擴展性系統的事件框架。
- LibSourcey :用於實時的視頻流和高性能網絡應用程序的C++11 evented IO
- LibU : C語言寫的多平臺工具庫
- Loki :C++庫的設計,包括常見的設計模式和習語的實現。
- MiLi :只含頭文件的小型C++庫
- openFrameworks :開發C++工具包,用於創意性編碼。
- Qt :跨平臺的應用程序和用戶界面框架
- Reason :跨平臺的框架,使開發者能夠更容易地使用Java,.Net和Python,同時也滿足了他們對C++性能和優勢的需求。
- ROOT :具備所有功能的一系列面向對象的框架,能夠非常高效地處理和分析大量的數據,爲歐洲原子能研究機構所用。
- STLport:是STL具有代表性的版本
- STXXL:用於額外的大型數據集的標準模板庫。
- Ultimate++ :C++跨平臺快速應用程序開發框架
- Windows Template Library:用於開發Windows應用程序和UI組件的C++庫
- Yomm11 :C++11的開放multi-methods.
人工智能
- btsk :遊戲行爲樹啓動器工具
- Evolving Objects:基於模板的,ANSI C++演化計算庫,能夠幫助你非常快速地編寫出自己的隨機優化算法。
- Neu:C++11框架,編程語言集,用於創建人工智能應用程序的多用途軟件系統。
異步事件循環
- Boost.Asio:用於網絡和底層I/O編程的跨平臺的C++庫。
- libev :功能齊全,高性能的時間循環,輕微地仿效libevent,但是不再像libevent一樣有侷限性,也修復了它的一些bug。
- libevent :事件通知庫
- libuv :跨平臺異步I/O。
音頻
音頻,聲音,音樂,數字化音樂庫
- FMOD :易於使用的跨平臺的音頻引擎和音頻內容的遊戲創作工具。
- Maximilian :C++音頻和音樂數字信號處理庫
- OpenAL :開源音頻庫—跨平臺的音頻API
- Opus:一個完全開放的,免版稅的,高度通用的音頻編解碼器
- Speex:免費編解碼器,爲Opus所廢棄
- Tonic: C++易用和高效的音頻合成
- Vorbis: Ogg Vorbis是一種完全開放的,非專有的,免版稅的通用壓縮音頻格式。
生態學
生物信息,基因組學和生物技術
- libsequence:用於表示和分析羣體遺傳學數據的C++庫。
- SeqAn:專注於生物數據序列分析的算法和數據結構。
- Vcflib :用於解析和處理VCF文件的C++庫
- Wham:直接把聯想測試應用到BAM文件的基因結構變異。
壓縮
壓縮和歸檔庫
- bzip2:一個完全免費,免費專利和高質量的數據壓縮
- doboz:能夠快速解壓縮的壓縮庫
- PhysicsFS:對各種歸檔提供抽象訪問的庫,主要用於視頻遊戲,設計靈感部分來自於Quake3的文件子系統。
- KArchive:用於創建,讀寫和操作文件檔案(例如zip和 tar)的庫,它通過QIODevice的一系列子類,使用gzip格式,提供了透明的壓縮和解壓縮的數據。
- LZ4 :非常快速的壓縮算法
- LZHAM :無損壓縮數據庫,壓縮比率跟LZMA接近,但是解壓縮速度卻要快得多。
- LZMA :7z格式默認和通用的壓縮方法。
- LZMAT :及其快速的實時無損數據壓縮庫
- miniz:單一的C源文件,緊縮/膨脹壓縮庫,使用zlib兼容API,ZIP歸檔讀寫,PNG寫方式。
- Minizip:Zlib最新bug修復,支持PKWARE磁盤跨越,AES加密和IO緩衝。
- Snappy :快速壓縮和解壓縮
- ZLib :非常緊湊的數據流壓縮庫
- ZZIPlib:提供ZIP歸檔的讀權限。
併發性
併發執行和多線程
- Boost.Compute :用於OpenCL的C++GPU計算庫
- Bolt :針對GPU進行優化的C++模板庫
- C++React :用於C++11的反應性編程庫
- Intel TBB :Intel線程構件塊
- Libclsph:基於OpenCL的GPU加速SPH流體仿真庫
- OpenCL :並行編程的異構系統的開放標準
- OpenMP:OpenMP API
- Thrust :類似於C++標準模板庫的並行算法庫
- HPX :用於任何規模的並行和分佈式應用程序的通用C++運行時系統
- VexCL :用於OpenCL/CUDA 的C++向量表達式模板庫。
容器
- C++ B-tree :基於B樹數據結構,實現命令內存容器的模板庫
- Hashmaps: C++中開放尋址哈希表算法的實現
密碼學
- Bcrypt :一個跨平臺的文件加密工具,加密文件可以移植到所有可支持的操作系統和處理器中。
- BeeCrypt:
- Botan: C++加密庫
- Crypto++:一個有關加密方案的免費的C++庫
- GnuPG: OpenPGP標準的完整實現
- GnuTLS :實現了SSL,TLS和DTLS協議的安全通信庫
- Libgcrypt
- libmcrypt
- LibreSSL:免費的SSL/TLS協議,屬於2014 OpenSSL的一個分支
- LibTomCrypt:一個非常全面的,模塊化的,可移植的加密工具
- libsodium:基於NaCI的加密庫,固執己見,容易使用
- Nettle 底層的加密庫
- OpenSSL : 一個強大的,商用的,功能齊全的,開放源代碼的加密庫。
- Tiny AES128 in C :用C實現的一個小巧,可移植的實現了AES128ESB的加密算法
數據庫
數據庫,SQL服務器,ODBC驅動程序和工具
- hiberlite :用於Sqlite3的C++對象關係映射
- Hiredis: 用於Redis數據庫的很簡單的C客戶端庫
- LevelDB: 快速鍵值存儲庫
- LMDB:符合數據庫四大基本元素的嵌入鍵值存儲
- MySQL++:封裝了MySql的C API的C++ 包裝器
- RocksDB:來自Facebook的嵌入鍵值的快速存儲
- SQLite:一個完全嵌入式的,功能齊全的關係數據庫,只有幾百KB,可以正確包含到你的項目中。
調試
調試庫, 內存和資源泄露檢測,單元測試
- Boost.Test:Boost測試庫
- Catch:一個很時尚的,C++原生的框架,只包含頭文件,用於單元測試,測試驅動開發和行爲驅動開發。
- CppUnit:由JUnit移植過來的C++測試框架
- CTest:CMake測試驅動程序
- googletest:谷歌C++測試框架
- ig-debugheap:用於跟蹤內存錯誤的多平臺調試堆
- libtap:用C語言編寫測試
- MemTrack —用於C++跟蹤內存分配
- microprofile- 跨平臺的網絡試圖分析器
- minUnit :使用C寫的迷你單元測試框架,只使用了兩個宏
- Remotery:用於web視圖的單一C文件分析器
- UnitTest++:輕量級的C++單元測試框架
遊戲引擎
- Cocos2d-x :一個跨平臺框架,用於構建2D遊戲,互動圖書,演示和其他圖形應用程序。
- Grit :社區項目,用於構建一個免費的遊戲引擎,實現開放的世界3D遊戲。
- Irrlicht :C++語言編寫的開源高性能的實時#D引擎
- Polycode:C++實現的用於創建遊戲的開源框架(與Lua綁定)。
圖形用戶界面
- CEGUI : 很靈活的跨平臺GUI庫
- FLTK :快速,輕量級的跨平臺的C++GUI工具包。
- GTK+: 用於創建圖形用戶界面的跨平臺工具包
- gtkmm :用於受歡迎的GUI庫GTK+的官方C++接口。
- imgui:擁有最小依賴關係的立即模式圖形用戶界面
- libRocket :libRocket 是一個C++ HTML/CSS 遊戲接口中間件
- MyGUI :快速,靈活,簡單的GUI
- Ncurses:終端用戶界面
- QCustomPlot :沒有更多依賴關係的Qt繪圖控件
- Qwt :用戶與技術應用的Qt 控件
- QwtPlot3D :功能豐富的基於Qt/OpenGL的C++編程庫,本質上提供了一羣3D控件
- OtterUI :OtterUI 是用於嵌入式系統和互動娛樂軟件的用戶界面開發解決方案
- PDCurses 包含源代碼和預編譯庫的公共圖形函數庫
- wxWidgets C++庫,允許開發人員使用一個代碼庫可以爲widows, Mac OS X,Linux和其他平臺創建應用程序
圖形
- bgfx:跨平臺的渲染庫
- Cairo:支持多種輸出設備的2D圖形庫
- Horde3D 一個小型的3D渲染和動畫引擎
- magnum C++11和OpenGL 2D/3D 圖形引擎
- Ogre 3D 用C++編寫的一個面向場景,實時,靈活的3D渲染引擎(並非遊戲引擎)
- OpenSceneGraph 具有高性能的開源3D圖形工具包
- Panda3D 用於3D渲染和遊戲開發的框架,用Python和C++編寫。
- Skia 用於繪製文字,圖形和圖像的完整的2D圖形庫
- urho3d 跨平臺的渲染和遊戲引擎。
圖像處理
- Boost.GIL:通用圖像庫
- CImg :用於圖像處理的小型開源C++工具包
- CxImage :用於加載,保存,顯示和轉換的圖像處理和轉換庫,可以處理的圖片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
- FreeImage :開源庫,支持現在多媒體應用所需的通用圖片格式和其他格式。
- GDCM:Grassroots DICOM 庫
- ITK:跨平臺的開源圖像分析系統
- Magick++:ImageMagick程序的C++接口
- MagickWnd:ImageMagick程序的C++接口
- OpenCV : 開源計算機視覺類庫
- tesseract-ocr:OCR引擎
- VIGRA :用於圖像分析通用C++計算機視覺庫
- VTK :用於3D計算機圖形學,圖像處理和可視化的開源免費軟件系統。
國際化
Jason
- frozen : C/C++的Jason解析生成器
- Jansson :進行編解碼和處理Jason數據的C語言庫
- jbson :C++14中構建和迭代BSON data,和Json 文檔的庫
- JeayeSON:非常健全的C++ JSON庫,只包含頭文件
- JSON++ : C++ JSON 解析器
- json-parser:用可移植的ANSI C編寫的JSON解析器,佔用內存非常少
- json11 :一個迷你的C++11 JSON庫
- jute :非常簡單的C++ JSON解析器
- ibjson:C語言中的JSON解析和打印庫,很容易和任何模型集成。
- libjson:輕量級的JSON庫
- PicoJSON:C++中JSON解析序列化,只包含頭文件
- qt-json :用於JSON數據和 QVariant層次間的相互解析的簡單類
- QJson:將JSON數據映射到QVariant對象的基於Qt的庫
- RapidJSON: 用於C++的快速JSON 解析生成器,包含SAX和DOM兩種風格的API
- YAJL :C語言中快速流JSON解析庫
日誌
- Boost.Log :設計非常模塊化,並且具有擴展性
- easyloggingpp:C++日誌庫,只包含單一的頭文件。
- Log4cpp :一系列C++類庫,靈活添加日誌到文件,系統日誌,IDSA和其他地方。
- templog:輕量級C++庫,可以添加日誌到你的C++應用程序中
機器學習
- Caffe :快速的神經網絡框架
- CCV :以C語言爲核心的現代計算機視覺庫
- mlpack :可擴展的C++機器學習庫
- OpenCV:開源計算機視覺庫
- Recommender:使用協同過濾進行產品推薦/建議的C語言庫。
- SHOGUN:Shogun 機器學習工具
- sofia-ml :用於機器學習的快速增量算法套件
數學
- Armadillo :高質量的C++線性代數庫,速度和易用性做到了很好的平衡。語法和MatlAB很相似
- blaze:高性能的C++數學庫,用於密集和稀疏算法。
- ceres-solver :來自谷歌的C++庫,用於建模和解決大型複雜非線性最小平方問題。
- CGal: 高效,可靠的集合算法集合
- cml :用於遊戲和圖形的免費C++數學庫
- Eigen :高級C++模板頭文件庫,包括線性代數,矩陣,向量操作,數值解決和其他相關的算法。
- GMTL:數學圖形模板庫是一組廣泛實現基本圖形的工具。
- GMP:用於個高精度計算的C/C++庫,處理有符號整數,有理數和浮點數。
多媒體
- GStreamer :構建媒體處理組件圖形的庫
- LIVE555 Streaming Media :使用開放標準協議(RTP/RTCP, RTSP, SIP) 的多媒體流庫
- libVLC :libVLC (VLC SDK)媒體框架
- QtAv:基於Qt和FFmpeg的多媒體播放框架,能夠幫助你輕而易舉地編寫出一個播放器
- SDL :簡單直控媒體層
- SFML :快速,簡單的多媒體庫
網絡
- ACE:C++面向對象網絡變成工具包
- Boost.Asio:用於網絡和底層I/O編程的跨平臺的C++庫
- Casablanca:C++ REST SDK
- cpp-netlib:高級網絡編程的開源庫集合
- Dyad.c:C語言的異步網絡
- libcurl :多協議文件傳輸庫
- Mongoose:非常輕量級的網絡服務器
- Muduo :用於Linux多線程服務器的C++非阻塞網絡庫
- net_skeleton :C/C++的TCP 客戶端/服務器庫
- nope.c :基於C語言的超輕型軟件平臺,用於可擴展的服務器端和網絡應用。 對於C編程人員,可以考慮node.js
- Onion :C語言HTTP服務器庫,其設計爲輕量級,易使用。
- POCO:用於構建網絡和基於互聯網應用程序的C++類庫,可以運行在桌面,服務器,移動和嵌入式系統。
- RakNet:爲遊戲開發人員提供的跨平臺的開源C++網絡引擎。
- Tuf o :用於Qt之上的C++構建的異步Web框架。
- WebSocket++ :基於C++/Boost Aiso的websocket 客戶端/服務器庫
- ZeroMQ :高速,模塊化的異步通信庫
物理學
動力學仿真引擎
- Box2D:2D的遊戲物理引擎。
- Bullet :3D的遊戲物理引擎。
- Chipmunk :快速,輕量級的2D遊戲物理庫
- LiquidFun:2D的遊戲物理引擎
- ODE :開放動力學引擎-開源,高性能庫,模擬剛體動力學。
- ofxBox2d:Box2D開源框架包裝器。
- Simbody :高性能C++多體動力學/物理庫,模擬關節生物力學和機械系統,像車輛,機器人和人體骨骼。
機器人學
- MOOS-IvP :一組開源C++模塊,提供機器人平臺的自主權,尤其是自主的海洋車輛。
- MRPT:移動機器人編程工具包
- PCL :點雲庫是一個獨立的,大規模的開放項目,用於2D/3D圖像和點雲處理。
- Robotics Library (RL): 一個獨立的C++庫,包括機器人動力學,運動規劃和控制。
- RobWork:一組C++庫的集合,用於機器人系統的仿真和控制。
- ROS :機器人操作系統,提供了一些庫和工具幫助軟件開發人員創建機器人應用程序。
科學計算
腳本
- ChaiScript :用於C++的易於使用的嵌入式腳本語言。
- Lua :用於配置文件和基本應用程序腳本的小型快速腳本引擎。
- luacxx:用於創建Lua綁定的C++ 11 API
- SWIG :一個可以讓你的C++代碼鏈接到JavaScript,Perl,PHP,Python,Tcl和Ruby的包裝器/接口生成器
- V7:嵌入式的JavaScript 引擎。
- V8 :谷歌的快速JavaScript引擎,可以被嵌入到任何C++應用程序中。
序列化
- Cap’n Proto :快速數據交換格式和RPC系統。
- cereal :C++11 序列化庫
- FlatBuffers :內存高效的序列化庫
- MessagePack :C/C++的高效二進制序列化庫,例如 JSON
- protobuf :協議緩衝,谷歌的數據交換格式。
- protobuf-c :C語言的協議緩衝實現
- SimpleBinaryEncoding:用於低延遲應用程序的對二進制格式的應用程序信息的編碼和解碼。
- Thrift :高效的跨語言IPC/RPC,用於C++,Java,Python,PHP,C#和其它多種語言中,最初由Twitter開發。
視頻
- libvpx :VP8/VP9編碼解碼SDK
- FFmpeg :一個完整的,跨平臺的解決方案,用於記錄,轉換視頻和音頻流。
- libde265 :開放的h.265視頻編解碼器的實現。
- OpenH264:開源H.364 編解碼器。
- Theora :免費開源的視頻壓縮格式。
虛擬機
- CarpVM:C中有趣的VM,讓我們一起來看看這個。
- MicroPython :旨在實現單片機上Python3.x的實現
- TinyVM:用純粹的ANSI C編寫的小型,快速,輕量級的虛擬機。
Web應用框架
- Civetweb :提供易於使用,強大的,C/C++嵌入式Web服務器,帶有可選的CGI,SSL和Lua支持。
- CppCMS :免費高性能的Web開發框架(不是 CMS).
- Crow :一個C++微型web框架(靈感來自於Python Flask)
- Kore :使用C語言開發的用於web應用程序的超快速和靈活的web服務器/框架。
- libOnion:輕量級的庫,幫助你使用C編程語言創建web服務器。
- QDjango:使用C++編寫的,基於Qt庫的web框架,試圖效仿Django API,因此得此名。
- Wt :開發Web應用的C++庫。
XML
XML就是個垃圾,xml的解析很煩人,對於計算機它也是個災難。這種糟糕的東西完全沒有存在的理由了。-Linus Torvalds
- Expat :用C語言編寫的xml解析庫
- Libxml2 :Gnome的xml C解析器和工具包
- libxml++ :C++的xml解析器
- PugiXML :用於C++的,支持XPath的輕量級,簡單快速的XML解析器。
- RapidXml :試圖創建最快速的XML解析器,同時保持易用性,可移植性和合理的W3C兼容性。
- TinyXML :簡單小型的C++XML解析器,可以很容易地集成到其它項目中。
- TinyXML2:簡單快速的C++CML解析器,可以很容易集成到其它項目中。
- TinyXML++:TinyXML的一個全新的接口,使用了C++的許多許多優勢,模板,異常和更好的異常處理。
- Xerces-C++ :用可移植的C++的子集編寫的XML驗證解析器。
多項混雜
一些有用的庫或者工具,但是不適合上面的分類,或者還沒有分類。
- C++ Format :C++的小型,安全和快速格式化庫
- casacore :從aips++ 派生的一系列C++核心庫
- cxx-prettyprint:用於C++容器的打印庫
- DynaPDF :易於使用的PDF生成庫
- gcc-poison :幫助開發人員禁止應用程序中的不安全的C/C++函數的簡單的頭文件。
- googlemock:編寫和使用C++模擬類的庫
- HTTP Parser :C的http請求/響應解析器
- libcpuid :用於x86 CPU檢測盒特徵提取的小型C庫
- libevil :許可證管理器
- libusb:允許移動訪問USB設備的通用USB庫
- PCRE:正則表達式C庫,靈感來自於Perl中正則表達式的功能。
- Remote Call Framework :C++的進程間通信框架。
- Scintilla :開源的代碼編輯控件
- Serial Communication Library :C++語言編寫的跨平臺,串口庫。
- SDS:C的簡單動態字符串庫
- SLDR :超輕的DNS解析器
- SLRE: 超輕的正則表達式庫
- Stage :移動機器人模擬器
- VarTypes:C++/Qt4功能豐富,面向對象的管理變量的框架。
- ZBar:‘條形碼掃描器’庫,可以掃描照片,圖片和視頻流中的條形碼,並返回結果。
- CppVerbalExpressions :易於使用的C++正則表達式
- QtVerbalExpressions:基於C++ VerbalExpressions 庫的Qt庫
- PHP-CPP:使用C++來構建PHP擴展的庫
- Better String :C的另一個字符串庫,功能更豐富,但是沒有緩衝溢出問題,還包含了一個C++包裝器。
軟件
用於創建開發環境的軟件
編譯器
C/C++編譯器列表
- Clang :由蘋果公司開發的
- GCC:GNU編譯器集合
- Intel C++ Compiler :由英特爾公司開發
- LLVM :模塊化和可重用編譯器和工具鏈技術的集合
- Microsoft Visual C++ :MSVC,由微軟公司開發
- Open WatCom :Watcom,C,C++和Fortran交叉編譯器和工具
- TCC :輕量級的C語言編譯器
在線編譯器
在線C/C++編譯器列表
- codepad :在線編譯器/解釋器,一個簡單的協作工具
- CodeTwist:一個簡單的在線編譯器/解釋器,你可以粘貼的C,C++或者Java代碼,在線執行並查看結果
- coliru :在線編譯器/shell, 支持各種C++編譯器
- Compiler Explorer:交互式編譯器,可以進行彙編輸出
- CompileOnline:Linux上在線編譯和執行C++程序
- Ideone :一個在線編譯器和調試工具,允許你在線編譯源代碼並執行,支持60多種編程語言。
調試器
C/C++調試器列表
- Comparison of debuggers :來自維基百科的調試器列表
- GDB :GNU調試器
- Valgrind:內存調試,內存泄露檢測,性能分析工具。
集成開發環境(IDE)
C/C++集成開發環境列表
- AppCode :構建與JetBrains’ IntelliJ IDEA 平臺上的用於Objective-C,C,C++,Java和Java開發的集成開發環境
- CLion:來自JetBrains的跨平臺的C/C++的集成開發環境
- Code::Blocks :免費C,C++和Fortran的集成開發環境
- CodeLite :另一個跨平臺的免費的C/C++集成開發環境
- Dev-C++:可移植的C/C++/C++11集成開發環境
- Eclipse CDT:基於Eclipse平臺的功能齊全的C和C++集成開發環境
- Geany :輕量級的快速,跨平臺的集成開發環境。
- IBM VisualAge :來自IBM的家庭計算機集成開發環境。
- Irony-mode:由libclang驅動的用於Emacs的C/C++微模式
- KDevelop:免費開源集成開發環境
- Microsoft Visual Studio :來自微軟的集成開發環境
- NetBeans :主要用於Java開發的的集成開發環境,也支持其他語言,尤其是PHP,C/C++和HTML5。
- Qt Creator:跨平臺的C++,Javascript和QML集成開發環境,也是Qt SDK的一部分。
- rtags:C/C++的客戶端服務器索引,用於 跟基於clang的emacs的集成
- Xcode :由蘋果公司開發
- YouCompleteMe:一個用於Vim的根據你敲的代碼快速模糊搜索並進行代碼補全的引擎。
構建系統
- Bear :用於爲clang工具生成編譯數據庫的工具
- Biicode:基於文件的簡單依賴管理器。
- CMake :跨平臺的免費開源軟件用於管理軟件使用獨立編譯的方法進行構建的過程。
- CPM:基於CMake和Git的C++包管理器
- FASTBuild:高性能,開源的構建系統,支持高度可擴展性的編譯,緩衝和網絡分佈。
- Ninja :專注於速度的小型構建系統
- Scons :使用Python scipt 配置的軟件構建工具
- tundra :高性能的代碼構建系統,甚至對於非常大型的軟件項目,也能提供最好的增量構建次數。
- tup:基於文件的構建系統,用於後臺監控變化的文件。
靜態代碼分析
提高質量,減少瑕疵的代碼分析工具列表
- Cppcheck :靜態C/C++代碼分析工具
- include-what-you-use :使用clang進行代碼分析的工具,可以#include在C和C++文件中。
- OCLint :用於C,C++和Objective-C的靜態源代碼分析工具,用於提高質量,減少瑕疵。
- Clang Static Analyzer:查找C,C++和Objective-C程序bug的源代碼分析工具
- List of tools for static code analysis :來自維基百科的靜態代碼分析工具列表