C/C++ 類庫開發庫參考
http://blog.chinaunix.net/space.php?uid=25414438&do=blog&id=131043
再貼到論壇這裡,分享給大家。
-------------------------------------------
原文地址:http://codingdao.com/wp/development-kb/c-cpp/c-cpp-lib-collection/
作者:Breaker
內容源於網路,所以共享給社群
-------------------------------------------
C/C++ 開發庫 | C/C++ Development Library
這裡收集一些著名的 C/C++ 開發庫、SDK、類庫、可複用類與結構程式碼 等資訊,列舉它們的介紹、參考和網站連結,為各位 C/C++ 程式設計師和愛好者提供檢索和查閱類庫的方便。
下面收集的 C/C++ 類庫介紹整理來源於文章:C++ 資源之不完全導引(作者:曾毅、陶文),這篇文章曾發表於 2004 年 5 月《CSDN 開發高手》。
上文中介紹的類庫有些已經多年未見釋出和網站內容的更新了,特別是一些開源的專案。我檢查了作者提供的 連結地址 和專案的 活躍程度,更改內容上的偏差並補全了重要說明。另外,增加了自己使用和了解的 C/C++ 類庫的介紹。
因為在下面的介紹中,我也有大量未曾使用和了解的開發庫、類庫,所以介紹如有紕漏和錯誤,都可以
下面的 C/C++ 開發庫、類庫會不定期更新。
更新說明列表 (Last Update: 2011-02)
目錄
- C/C++ 標準庫與執行時庫 | C/C++ Standard & Runtime Library
- 模式複用與基礎功能 | Pattern Reuse & Basic Function
- 字串處理 | String Handling
- 應用框架與圖形使用者介面 | Application Framework & GUI
- 通用功能 | General Function
- 執行緒 | Threads
- 科學與平行計算 | Scientific & Parallel Computation
- 網路功能 | Network Communication
- XML 功能 | XML Functions
- 持久儲存 | Persistence & Storage
- 加解密 | Cryptographic
- 日誌 | Logging
- 函式式程式設計 | Functional Programming
- 雜項 | MISC
C/C++ 標準庫與執行時庫 | C/C++ Standard & Runtime Library
實現 ISO 的 C/C++ 語言規格標準中要求的標準庫,每個組織或廠家的實現均有差異。在連結的二進位制庫中通常還伴隨實現了平臺特定的基礎執行時庫,例如 POSIX 標準。
ISO C/C++/POSIX 的標準如下:
Microsoft C Run-Time Libraries & Standard C++ Library
MSDN C Run-Time Libraries:討論 Microsoft CRT、Standard C++ Library 對應的 lib 和 dll 檔案。
MSDN STL/CLR Library Reference:從 VC9 開始,微軟的 STL 分為兩種實現,一種是傳統的 C++ 原生代碼實現,另一種是託管 C++ 的 CLR 實現,稱為 STL/CLR 庫。這裡是 STL/CLR 庫的參考。
微軟的這一套執行時庫,在功能和連結庫上分為 3 個部分:Run-Time Libraries (CRT)、Standard C++ Library、CRT for Managed Code,分別對應的動態連結庫為:msvcr[ver].dll、msvcp[ver].dll、msvcm[ver].dll。
VC8、VC9 採用了 Side-by-Side (WinSxS, Manifest) 方式部署 CRT 庫,但在 VC10 中又去掉了 Side-by-Side 的部署方式。在 %SystemRoot%\system32 中有一個隨 Windows 釋出的 Known DLL:msvcrt.dll;而帶版本號 [ver] 的庫在 VC 或 VC Redistributable Package 中釋出。
VC7 之後在 namespace stdext 中提供 hash_map、hash_set 兩個擴充套件標準的容器模板。
GNU C/C++ Library
通常稱為 GNU libc 和 libstdc++,是 GNU 的 C/C++ 標準庫和執行時庫的實現,在各種 Linux 發行版中都會安裝該庫,也是很多開源 C/C++ 程式選擇的基礎庫。另外 libc 和 libstdc++ 也被移植到各種平臺下,如 Windows 下的 MinGW 和 Cygwin 就包含 libc 和 libstdc++:
MinGW
MinGW: Minimalist GNU for Windows,在 Windows 平臺提供一套 GNU 的開發環境,包括工具和開發庫。MinGW 中包括對 GCC 和 GNU libc、libstdc++ 的 Windows 移植。
Cygwin
發源於 RedHat 的 Cygwin 專案,目標在於在 Windows 下建立一套 Unix/Linux 環境,包括 X Window 這種 Linux GUI 基礎庫在內,所以又叫 Cygwin/X。Cygwin 實現的重點是 cygwin1.dll,它向其它 Cygwin 程式提供 POSIX 介面,並在內部轉換成 Windows API 呼叫。Cygwin 中包括對 GCC 和 GNU libc、libstdc++ 的 Windows 移植。
MinGW 和 Cygwin 的詳細介紹和開發環境的搭建,參考我的以下文章:
Tiny C Runtime Library
一個小巧的 Windows 平臺 CRT 庫實現,可用來替換對 Microsoft CRT 庫的連結,達到精簡依賴的基礎庫、減小最終釋出程式大小的作用。
SGI STL
SGI 公司的 C++ 標準模版庫。
STLport
SGI STL 庫的跨平臺可移植版本。
Dinkumware C++ Library
P.J. Plauger 編寫的高品質的標準庫。P.J. Plauger 博士是 Dr. Dobb's 程式設計傑出獎的獲得者。其編寫的庫長期被 Microsoft 採用,並且 Borland 也取得了其 OEM 的 license,在其 C/C++ 的產品中採用 Dinkumware 的庫。
RogueWave Standard C++ Library
這個庫在 Borland C++ Builder 的早期版本中曾經被採用,後來被其它的庫給替換了。不推薦使用。
模式複用與基礎功能 | Pattern Reuse & Basic Function
其實這個分類的界限很難確定,原因是有一些 C/C++ 庫提供各種各樣的模式形式,在功能上也包羅永珍,並不專一,屬於綜合性功能。但在目標上這些庫都是一致的:加強 C/C++ 語言的功能、複用度,提供穩定的基礎功能。什麼是基礎功能?應該是那些不依賴於平臺,每個應用可能都會用到的功能,例如:字串、通用演算法和容器等。
Boost
Boost 是高質量、可移植、開放原始碼的 C++ 庫,作為標準庫的後備,是 C++ 標準化程序之一。Boost 庫由 C++ 標準委員會庫工作組成員發起,在 C++ 社群中影響甚大。Boost 庫為我們帶來了最新、最酷、最實用的技術,是不折不扣的“準標準庫”。
Boost 不是一個庫,而是一組庫,每一個 Boost 庫都是一個相對獨立的功能(通常在一個子目錄下發布),可以獨立連結和使用,一般稱 Boost 中的 xxx 庫為 Boost.xxx。有些 Boost 庫根本不用編譯成二進位制的靜態或動態連結庫形式,只要在應用它的原始碼中 include 包含它的標頭檔案就可以直接使用,稱為 Header-Only 庫,如 Boost.Lambda。
Boost 由於其對跨平臺的強調,對標準 C++ 的強調,是編寫平臺無關,現代 C++ 的開發者必備的工具。但是 Boost 中也有很多是實驗性質的東西,在實際的開發中實用需要謹慎。並且很多 Boost 中的庫功能堪稱對語言功能的擴充套件,其構造用盡精巧的手法,不要貿然的花費時間研讀。Boost 另外一面,比如 Graph 這樣的庫則是具有工業強度,結構良好,非常值得研讀的精品程式碼,並且也可以放心的在產品程式碼中多多利用。
另外,Boost 的官方文件也是相當漂亮的,講述的清晰明瞭:從 概念 到 示例都有,在開源庫中是不可多得的。
除了 Boost 釋出包中包括的庫之外,還有一些庫處於提交待審成為 Boost 庫的狀態 (Proposal),或處於尚在測試和評審階段 (TR),Boost 釋出包中未將這些庫包含進來,可以從這些庫的專項地址下載,例如用於日誌的 Boost.Log 庫。
列舉 Boost 中的幾個庫:
Loki
Loki 的作者就是大名頂頂的 Andrei Alexandrescu,"Modern C++ Design"(《C++ 設計新思維》)一書的作者,Boost 和 C++0x 的推動者之一。
Loki 早期是 "Modern C++ Design" 一書的附帶類庫,是實驗和教學性質的庫。但隨著作者的維護、更新和改進,Loki 現在已經在複用性和穩定性上已逐漸成熟了。
Loki 中把 C++ 模板的功能發揮到了極致。嘗試把類似 設計模式 這樣思想層面的東西通過庫來提供。同時還提供了智慧指標這樣比較實用的功能。
stlsoft
stlsoft 從名字都可以知道是 STL 的擴充套件功能庫,這一點和 Boost 的定位很像。stlsoft 的作者是 Matthew Wilson,stlsoft 也有配套的書籍 "Extended STL" 共兩卷:
Extended STL, Volume 1: Collections and Iterators
Extended STL, volume 2: Adaptors, Algorithms, Allocators, Functions, Ranges and Views
stlsoft 包含一些基本的通用功能,例如字串處理 (stlsoft/string/),當然這是基於 std::basic_string 的處理。stlsoft 最吸引人的地方是:免費 和 全部的功能都是 Header-Only 的,使用時只要包含標頭檔案即可。
字串處理 | String Handling
通用的字串處理功能,可以劃分到 模式複用與基礎功能 | Pattern Reuse & Basic Function 類別中,但為了查閱方便,還是把它分離出來了。包括:字串的類包裹物件、格式化字串、Tokenizer、分詞、正則表示式處理 等。當然 C/C++ 的標準庫,以及很多應用框架和 GUI 庫中,也都有字串處理相關的功能實現(如:strtok()、std::basic_string、std::basic_stringstream、 ATL/MFC 的 CStringT 等),這裡就不再列出這些功能了,有需要可以參考 MSDN Library 和 www.cppreference.com、www.cplusplus.com 等一些 C/C++ 參考網站。
Boost 中的字串處理相關庫
上面說了 Boost 是一套包羅永珍的通用功能 C++ 庫,下面列出一些 Boost 中的和字串處理相關的庫:
Boost String Algorithms Library:Boost 字串演算法庫,功能大多在標頭檔案 boost/algorithm/string.hpp 中集中宣告,並在 boost/algorithm/string/ 下有分別功能的定義,在名字空間 boost::algorithm 中。這個 Boost 字串演算法庫通常和標準庫的字串實現 std::basic_string 聯用,作為標準庫字串功能的擴充套件,例如可以做 tokenize 的演算法 boost::algorithm::split() 或類 boost::algorithm::split_iterator, boost::algorithm::token_finder。
Boost.Tokenizer:Boost 專門提供的字串 tokenize 分詞庫,在 boost/tokenizer.hpp 中宣告,和它相關的還有 分詞迭代器 (boost\token_iterator.hpp) 和 分詞工具類 (boost\token_functions.hpp)。
Boost.Regex:上面已提到了,這是 Boost 的正則表示式功能實現。
另外 Boost 中還有 lexical_cast(數值/字串轉換)、Format(類似 printf() 的格式化)、Spirit(EBNF 解析)等和字串/文字處理有關的庫。
Common Text Transformation Library:http://cttl.sourceforge.net/,基於標準庫 std::basic_string 的字串處理擴充套件功能,有 EBNF 解析功能。
GRETA:http://research.microsoft.com/,微軟 Research 的正則表示式模板庫專案(已停止維護),支援 Perl 相容的正則表示式處理。
應用框架與圖形使用者介面 | Application Framework & GUI
通用的應用程式開發框架庫,通常以 GUI 為其重要的組成部分,但絕不止於 GUI,功能上小到 字串,中到 網路通訊,大到 層次架構都有可能支援。並且應用框架庫不只是庫的複用,而可能會載入程式員的程式架構設計,例如 MVC 架構。一般情況下足以單獨依靠 某一個應用框架庫來完成程式的開發。通常可以永葆活力的應用框架庫背後都是有實力的組織或公司,穩定性比一般的庫要強。
MFC
MFC (Microsoft Foundation Class) 微軟基礎類庫,構建於 Windows API 之上,提供 OO 的介面風格。在 .Net Framework 成名前,MFC 是 Windows 平臺開發程式主框架的首選,現在由 .Net Framework 接過這個任務。
ATL/WTL
ATL (Active Template Library) 是一組輕量級、高效的模板類,提供 GP 的介面風格,這些類為建立 COM 元件提供了基本的功能。
有一部分類和程式碼在 ATL 和 MFC 之間是共享的 (ATL/MFC Shared Classes),例如 實現 CString 的 CStringT 模板。
WTL 是基於 ATL 的一個庫。使用了大量 ATL 的輕量級手法、模板等技術,在程式碼尺寸,以及速度優化方面做得非常到位。主要應用目標是 COM 輕量級網路下載的視覺化控制元件 (ActiveX)。
不過微軟的商業策略,包括 MFC 和風頭上的 .Net Framework,WTL 早就被微軟冷落了,最近的官方版本是 2007 年釋出的 WTL 8.0,不過在 Sourceforge 的 WTL 專案中,於 2009 年釋出了 WTL 8.1。
wxWidgets
由社群維護的開源跨平臺 C++ 通用程式框架和 GUI 類庫。wxWidgets 原來也叫 wxWindows,但由於微軟的緣故更名為 wxWidgets。wxWidgets 的層次結構類似 MFC,熟悉 MFC 的人可以很快上手 wxWidgets。wxWidgets 使用基於執行平臺的 Native API 實現,對於 Windows 來說就是 Windows API,對於 Linux 則可能是 GTK+ 或 X11。
除了 C++ 作為開發介面語言外,wxWidgets 最著名的其它語言封裝介面是 Python 的封裝介面:wxPython
wxWidgets 專案的活躍程度和更新、維護一直都很穩定,是值得長久信賴的通用程式框架和 GUI 類庫。
GTK+/gtkmm
GTK+ (GIMP Toolkit) 是一個採用面向物件設計的使用 C 語言開發的 GUI 視窗開發庫。最早作為 GIMP 繪圖工具的基礎庫而開發。GTK+ 是 GNOME 桌面環境的基礎庫。gtkmm 是 GTK+ 的 C++ 語言封裝。
Qt
Qt 原來是 Trolltech 公司的一個跨平臺的 C++ GUI 框架,後來被 Nokia 收購成為其一個子部門。Qt 是另一個著名桌面環境 KDE 的基礎庫。和 GTK+ 不同,Qt 一開始就選擇 C++ 作為實現其完全面向物件框架的開發語言。
通用功能 | General Function
這些庫是包含了多種功能的綜合性開發庫、類庫,一般目標是提供可移植的基礎設施服務,例如 執行緒、網路功能 等。
P::Classes
活躍程度:2004-03 釋出版本 1.0.0 beta1,2005-01 網站最近訊息貼出 "We are not dead!" [2010-11 checked]
一個高度可移植的 C++ 應用程式框架。當前關注型別和執行緒安全的 Signal/Slot 機制,I/O 系統包括基於外掛的網路協議透明的 I/O 架構,基於外掛的應用程式訊息日誌框架,訪問 SQL 資料庫的類等。
ACDK
活躍程度:2006-03 公告 CVS 版下載 ACDK 5 a2 [2010-11 checked]
ACDK (Artefaktur Component Development Kit) 是一個平臺無關的 C++ 元件框架,目標是實現類似於 Java 或者 .NET 中的框架,涉及的方面有:反射機制、執行緒、Unicode、廢料收集、正則表示式、I/O、網路、SSL、SQL、實用工具、XML 等。還包括對 Java、Perl、Python、TCL、Lisp、COM 和 CORBA 的整合。
dlib C++ library
活躍程度:2010-11 釋出版本 17.32 [2010-11 checked]
提供多種功能的跨平臺綜合庫。涉及的方面有:數值計算 (Matrix)、網路功能 (Socket, streambuf, HTTP server)、執行緒、GUI、機器學習、影象處理(BMP 點陣圖)、資料壓縮與摘要、日誌、單元測試框架、命令列解析、XML 解析、容器、序列化、BASE64 編解碼、記憶體池管理 等。
Chilkat C++ Libraries
活躍程度:2010-07 釋出 VC6-VC10 編譯版本 9.1.0 [2010-11 checked]
提供一組庫,包括:Zip、Mail、IMAP、加解密、MHT、XML、字符集、MIME、PFX、FTP 等。
PTypes
活躍程度:2007-06 釋出版本 2.1.1 [2010-11 checked]
可以作為 STL 的簡單替代品,提供可移植的執行緒(同步物件)和網路(Socket 和 命名管道)支援,也包括字串、變體 (variant)、字符集、連結串列 等基礎型別的實現。主要應用目標是的網路服務程式 和 robots 等。
LFC
活躍程度:2002-06 釋出版本 0.5 [2010-11 checked]
一個提供通用目標的 C++ 類庫、框架,涉及的方面有:通用資料結構、通用演算法、檔案、Socket、執行緒、GUI、資料庫訪問、通用設計模式、資料流、RTTI、持久化、多媒體(包括遊戲開發與 3D 圖形)、通用網路協議 (HTTP, FTP)、正則表示式 等。
執行緒 | Threads
pthreads
由 POSIX 定義的執行緒實現規範 POSIX threads,C 語言的 API,在各種 Unix/Linux 和 Windows 下都有支援,是一套移植性很好的通用執行緒庫。
C++ Threads
活躍程度:2003-10 釋出版本 3.6 [2010-11 checked]
C++ 封裝的執行緒類,用於 Linux 開發的多執行緒支援。
ZThreads
活躍程度:2005-03 釋出版本 2.3.2 [2010-11 checked]
一個跨平臺,面向物件設計的執行緒和同步事務庫。在 POSIX 和 Windows 下經過測試。
科學與平行計算 | Scientific & Parallel Computation
這個一開始可以分為兩類:關於 數值計算 (Numeric Computation) 和 平行計算 的庫,但是有相當一部分庫同時涵蓋這兩種功能,並且現代的用於數學計算的程式越來越依靠並行處理來提升效能,所以就歸到了一類。
Blitz++
Blitz++ 是一個高效的數值計算函式庫,它的目的是建立一套具有 C++ 方便介面,同時又比 Fortran 速度更快的數值計算環境。通常,用 C++ 所寫出的數值程式,比 Fortran 慢 20% 左右,因此 Blitz++ 正是要改掉這個差距。方法是利用 C++ 的 template 技術,程式執行甚至可以比 Fortran 更快。
CGAL
CGAL (Computational Geometry Algorithms Library) 是高效幾何計算方面的 C++ 類庫,CGAL 也有
Python 和 Matlab 的 API 介面。CGAL 應用的領域有:圖形學、視覺化、輔助設計與建模、GIS 等。
POOMA
POOMA (Parallel Object-Oriented Methods and Applications) 原先是由 Los Alamos National Laboratory (LANL) 開發的用於平行計算的 C++ 類庫。
POOMA 提供近似於數學語法的高層語法,來簡化演算法的程式設計,並且自動處理多處理器之間的通訊事務。POOMA 被用於物理模型的計算,例如:粒子物理計算。
FreePOOMA 是 POOMA 的繼續專案,原先的 POOMA 已經很少維護了。
MTL
MTL (Matrix Template Library) 提供 矩陣 和 線性代數 計算的功能,是一個基於模板泛型設計,以高效能運算 (HPC: High-performance computing) 為目標的類庫。
MTL 有 2 個版本:MTL4 和 MTL2,MTL4 是 2005 後重寫的庫。
OpenMP
OpenMP 不是一套複用目的的開發庫,而是一組用於共享記憶體並行系統的多執行緒程式的一套指導規範,它由編譯和執行環境支援,最新的 GCC、ICC、VC 都對 OpenMP 有所支援。OpenMP 規範支援的語言包括 C、C++ 和 Fortran。開發時,在原始碼中使用編譯指示 (directive, #pragma) 指導編譯器並行化,編譯器自動將程式並行化,並在必要之處加入同步互斥語義。
Intel Compilers and Libraries
本來不想把 Intel Compilers and Libraries 放到這一類的,因為這個軟體包含了除 開發庫 外的編譯和其它工具,但是由於使用此軟體包能夠在 Intel 平臺下開發和生成出色效能的程式,以及對平行計算的強力支援,還是把它列出來了。這個軟體包以及從 ICC 編譯器增大到包括 VTune、Amplifier、Inspector、MKL (Math Kernel Library) 等各種效能工具和庫的開發套件,是開發 Intel 平臺高效能、併發程式的強力工具。
網路功能 | Network Communication
很多通用庫和應用框架庫,如 Boost.Asio,都有網路通訊功能、非同步網路 I/O 功能 (AIO) 或 Socket 封裝庫,這裡只列出以 網路通訊功能 為主要目的的開發庫。
ACE
ACE Home:從這裡開始瞭解 ACE,同時也是 ACE 之父 Schmidt 的主頁。
ACE Repository:Schmidt 是 Vanderbilt 大學的教授,ACE 的原始碼可以從 Vanderbilt 大學的 SVN 倉庫中下載。
ACE Docs:ACE 的 Doxygen 參考文件。
ACE (Adaptive Communication Environment) 中文翻譯為 自適應通訊環境,由 Douglas Schmidt 發起,後來有其它人員參與。
ACE 是一套重量級的 C++ 網路功能庫,它的特點是使用很多面向物件的設計模式來實現網路功能,並且有很好的跨平臺能力。ACE 的框架中實現了很多概念,諸如:事件多路分離和事件處理器分派、訊號處理、服務初始化、程序間通訊、共享記憶體管理、訊息路由、分散式服務動態配置、併發執行和同步 等。
因為 ACE 的模式眾多,所以使用者在清晰理解其概念的情況下,才會發揮 ACE 的效能。關於 ACE 的評價和學習步驟、資料,可以參考《學之者生,用之者死:ACE 歷史與簡評》(陳碩)。
A Stream Socket API for C++:http://www.pcs.cnu.edu/,Socket 封裝。
A simple IOCP Server/Client Class:http://www.codeproject.com/,Windows Socket + IOCP 完成埠機制封裝。在 Windows 下稍加更改可以讓這個變成符合自己需要的小巧而高效的網路處理類。配文講解的中文翻譯在
vckbase。
XML 功能 | XML Functions
XML 是現代通用的資料儲存格式,因為它的通用性和格式良好定義,被經常用在 資料儲存、資料交換 和 介面說明 等功能中。先列舉一些 XML 解析器 (XML Parser):
TinyXML:http://www.grinninglizard.com/tinyxml/,一個輕量級的 XML Parser.
MSXML
微軟的 XML Parser,全稱 Microsoft Core XML Services,採用 COM 的介面操作形式,提供 DOM 和 SAX2 API、XML Schema (XSD)、XPath、XSLT 功能。
xml4c:http://www.alphaworks.ibm.com/tech/xml4c,IBM 的重量級 XML Parser,C++ 實現,支援 100 多種字元編碼。
Xerces:http://xml.apache.org/xerces-c,Apache 的 XML Parser,支援少數的字元編碼,如 ASCII、UTF-8、UTF-16 等,功能包括驗證 DTD、SAX 和 DOM API 等。
libxml++:http://libxmlplusplus.sourceforge.net/,對的
libxml (The XML C parser and toolkit of Gnome) 解析器的 C++ 封裝。
XMLBooster:http://www.xmlbooster.com/,使用 DOM 和 SAX 兩大主流 XML 解析辦法之外的解析器。
下面列舉一些 XML 的功能庫:
Xalan:http://xml.apache.org/xalan-c/,Xalan 可以將 XML 文件轉換為 HTML、純文字或者其它 XML 型別文件。
gSOAP:http://gsoap2.sourceforge.net/,SOAP/Web Services 的一個 C++ 開源實現。
SOAP/Web Services in ATL Server
ATL Server Reference in MSDN (VS:微軟對 ATL Server 庫的支援降低了,在 MSDN Library 中,最後一個有 ATL Server 參考的版本是 VS8。因為現在微軟主推的 .Net 框架中已包含 HTTP 和 SOAP 等 Web 功能(WCF 等)。
ATL Server Library and Tools in CodePlex:ATL Server 現在在 CodePlex 上託管和維護,可以在這裡得到 ATL Server 最新的訊息。
這是微軟的 SOAP/Web Services 功能。原先微軟有一個 SOAP Toolkit 的庫,實現 SOAP/Web Services 功能,但後來被廢棄了,並移入了 .Net 框架中。所以要使用原生代碼 C/C++ 實現的 SOAP,就要使用 ATL Server 庫中的 SOAP/Web Services 功能。ATL Server 庫除了 SOAP 之外還提供其它 Web 功能,例如 HTTP 實現。
eXist:http://exist.sourceforge.net/,持續化 XML 儲存,XML 資料庫。
Simple XML Persistence Library (SXP):http://sxp.sourceforge.net/,將物件序列化為 XML 的輕量級的 C++ 庫,用於持久儲存。
持久儲存 | Persistence & Storage
通常 持久儲存 表示的概念包括:(1) 將型別(POD 型別、類物件、容器)序列化為二進位制資料。(2) 提供基於檔案/流的操作。(3) 提供基於資料庫的操作。對於 (3) 各資料庫管理軟體 (DBMS) 大多都提供自己的 C/C++ API,在 Windows 下更有 ODBC、OLE/DB 這種中間適配層提供統一的操作介面。下面只列出一些輕量級、開源的持久化功能。
s11n:http://s11n.net/,一個基於 STL 的 C++ 庫,用於序列化 POD 型別、STL 容器以及使用者定義型別。
MySQL Connector/C++:MySQL 5.1 Connector/C++ 參考,MySQL 資料庫客戶端操作的 C++ API。預設釋出的 MySQL 安裝包中包含其 C 語言的 API (MySQL Connector/C)。
SQLite:http://www.sqlite.org/,輕量級的 SQL DBMS,沒有 SQL 的伺服器端,單純基於檔案儲存。提供 API 支援,使使用者執行 SQL 語句來查詢/操縱資料,Firefox 3 就使用 SQLite 儲存其配置資料。
加解密 | Cryptographic
Crypto++:Crypto++ Sourceforge Project,
http://www.cryptopp.com/。C++ 封裝的加解密演算法庫。Crypto++ 是各種演算法的合集,包括對稱密碼、非對稱密碼、摘要演算法。
OpenSSL:http://www.openssl.org/。C API 的加解密演算法庫,以及 SSL 協議實現。OpenSSL 不只是加解密演算法庫,還包含網路功能(包括未使用和使用加密通道 SSL)和實用工具。關於 OpenSSL 的資料參考我的
OpenSSL 開發參考資料。
日誌 | Logging
Log for C++ (Log4cpp)
Log4cpp 主要用於 C++ 程式中寫日誌,有著較強的跨平臺移植能力。除了日誌功能外,Log4cpp 中包括很多可移植的基礎功能,例如:同步功能 (Condition, CriticalSection, Event, Mutex, Semaphore)、網路功能 (Socket, ServerSocket, DatagramSocket, SocketInputStream, SocketOutputStream)、檔案監控 (FileWatchdog)、智慧指標 (ObjectPtrT)、字串處理 (StrictMath,
StringHelper, StringTokenizer)、執行緒支援 等。
Boost.Log:http://sourceforge.net/projects/boost-log/,用於日誌記錄的 Boost 庫,目前沒有放入 Boost 釋出包中。
log4cxx:http://logging.apache.org/log4cxx/,Apache 出的日誌功能庫。
glog:http://code.google.com/p/google-glog/
Log4cplus:http://log4cplus.sourceforge.net/
Logging In C++:http://www.drdobbs.com/,這是 DrDobbs 上的一篇文章,教你怎麼寫出一個 C++ Logging 功能類。
函數語言程式設計 | Functional Programming
Boost.Lambda:Boost.Lambda 是 Boost 提供的函數語言程式設計特性。
The Functional C++ Library (FC++):http://www.cc.gatech.edu/,用模板庫來實現 C++ 的函數語言程式設計。
FACT!:http://www.fz-juelich.de/,另一個實現 C++ 函數語言程式設計的模板庫。
雜項 | MISC
CppUnit:CppUnit Sourceforge Project,一個 C++ 的單元測試框架,由 JUnit 移植而來,使用派生測試類的方式產生測試用例。
-------------------------------------------
更新說明列表
[2010-11] 最初撰寫 by
Breaker
[2010-12] 基本補全各個類別的開發庫。
[2010-12] 發現實際上有很多功能類似的開發庫、類庫,在
Sourceforge.net 上一搜就一大堆。這樣列舉不好,記憶不深,費時,意義也很小,覺得需自己仔細用過,並深入理解、積累經驗後才能對一個庫有所瞭解,而列舉庫的形式可以用一些 網路書籤服務 來做,更容易檢索。
[2011-02] (1). 修正一些開發庫的收藏地址和描述。(2). 在 Delicious 整理好了一個
C/C++ 開發庫 標籤,將本文中介紹的開發庫收藏地址整理成書籤,同時做了一個根據該
C/C++ 開發庫 標籤 RSS feed 同步的頁面,以供查閱,在
C/C++ 開發庫地址收藏,以後只更新 Delicious 收藏書籤即可 O(∩_∩)O。
相關推薦
C/C++ 類庫開發庫參考
剛貼了自己一篇文章,在:http://blog.chinaunix.net/space.php?uid=25414438&do=blog&id=131043 再貼到論壇這裡,分享給大家。 -----------------------------------
C++經典類庫(C++開發必看)
並且 audio 種類 stlport 極致 chilkat 很多 方案 科學計算 現實中,C++的庫門類繁多,解決的問題也是極其廣泛,庫從輕量級到重量級的都有。本文為你介紹了十一種類庫,有我們常見的,也有不常見的,一起來看。 如果你有一定的C基礎可能學起來比較容易些,
C#:撲克牌遊戲(1):規劃CardLib類庫開發撲克牌遊戲
(一):前言 這是《C#入門經典(第七版)》的學習筆記,接下來會通過一個撲克牌程式學習關於C#相關知識。 (二):前期思考過程 建立一個類庫,命名應該為CardLib,不過按照
C#操作MySql數據庫幫助類(Dapper,T-Sql)
user lex object per ram int rowfilter close tex using System.Text; using MySql.Data.MySqlClient; using System.Data; using Dapper; using
C++ log4cplus 類庫的封裝
pat get 全局 attach ins 日誌 erro def ring 對 log4cplus 庫的封裝,修改自網路 LogUtils.h /* * LogUtils.h * * Created on: 2018年8月9日 * Author: o
c/c++ 標準庫 set 自定義關鍵字類型與比較函數
尖括號 ios template end 傳遞函數 使用 out 例子 比較 標準庫 set 自定義關鍵字類型與比較函數 問題:哪些類型可以作為標準庫set的關鍵字類型呢??? 答案: 1,任意類型,但是需要額外提供能夠比較這種類型的比較函數。 2,這種類型實現了 &l
【C/C++開發】強制連結靜態庫所有符號(包括未被使用的)
C++程式在連結一個靜態庫時,如果該靜態庫裡的某些方法沒有任何地方呼叫到,最終這些沒有被呼叫到的方法或變數將會被丟棄掉,不會被連結到目標程式中。這樣做大大減小生成二進位制檔案的體積。但是,某些時候,即使靜態庫裡的某些方法沒有任何地方使用到,我們也希望將這些沒有使用到的程式碼編譯進最終的二進位制檔案中
ICTCLAS2016 linux C++版本 使用教程 Eclipse下開發C/C++程式之標頭檔案,庫檔案引用
歡迎使用NLPIR/ICTCLAS2014分詞系統 NLPIR分詞系統前身為2000年釋出的ICTCLAS詞法分析系統,從2009年開始,為了和以前工作進行大的區隔,並推廣NLPIR自然語言處理與資訊檢索共享平臺,調整命名為NLPIR分詞系統。張華平博士先後傾力打造十餘
常用的C/C++框架和庫、開發資源
– 1. Webbench Webbench是一個在Linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的效能,最多可以模擬3萬個併發連線去測試網站的負載能力。Webbench使用C語言編寫, 程式碼實在太簡潔,原始碼加起來不到600
java 呼叫c語言類庫
1:生成class檔案 2:在專案src下執行 : javah -classpath F:/Jama-1.0.3.jar;. -jni com.test.MatrixCalculate 生成.h檔案 3:由c語言生成dll或者so檔案 4:java呼叫 static{
Visual Studio 11開發指南(19)C++11更新-並行模式庫和代理庫
Visual Studio 11,具備並行模式庫和代理庫、 更輕鬆地開發多核處理器上執行的並行程式碼。這些庫的主要範例是根據任務 和併發執行庫,自定義的排程程式 進行處理的。到目前為止,處理任務的的概念原型,就使用task_handle ●型別 如下所示:1.task_gro
基於C++WebService開發庫—gsoap
因為專案中需要使用WebService,所以將webservice的有關東西溫故了一下。以前採用C#,這幾乎不成什麼問題,畢竟C#與WebService幾乎是同時火起來的,所以C#天然地支援webservice就不奇怪了。Java的情況大致與C#一樣,C/C++就不同了,
C++ json類庫Jsoncpp的使用
JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1
基於c++的網路開發庫boost.Asio學習 (一) Ubuntu安裝boost以及問題解決
執行環境:Ubuntu 12.04 版本: boost 1.68 下載網址:http://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.bz2/download
iOS 靜態類庫 打包 C,C++檔案及和OC混編
iOS 靜態類庫 編譯 C,C++ 我們都知道,OC 原生支援C, 在 建立的 OC類的 .m 裡面,可以直接編寫C的程式碼; 同樣 Xcode 也支援 OC ,C++的混編,此時,我們通常把OC建立的 .m 檔案,手動修改為 .mm 檔案以支援 oc c++的混編
C# 讀取類庫自己的App.config檔案
首先 類庫自己的App.config檔案會被編譯為 xxx.dll.config 其中 xxx就是類庫的名稱 configPath // 獲取類庫配置檔案的絕對路徑 public static string configPath = System.Re
C/C++ XMPP/Jabber 客戶端類庫對比/點評
================ gloox ================ Ans. 老牌庫,推薦 gloox是一個穩定功能完整的XMPP客戶端庫, 使用ANSI C++編寫, 使用它編寫標準客戶非常容易, 並能將Jabber/XMPP功能整合到現有的應用程式中, gloox遵循GNU GPL許可協
C#通用類庫--加密解密類
//類名:EcanSecurity//作用:加密解密//作者:劉典武//時間:2010-12-01using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;using S
JNI開發(一) 簡單的C程式碼打包成SO庫以及專案如何呼叫SO庫
前段時間開發過程中用到了簡單的JNI使用,當時發現很多網上文章總有這樣那樣的問題,最近趁時間充裕就記錄下來,以供記憶和交流。 JNI環境配置 這裡就不做多講,百度一下,把腳跨過牆就好。 寫
Java 通過 JNI 呼叫 C/C++ 類庫
說明 由於一些涉及到裝置或底層操作的類庫,大多是C或C++語言編寫的,對於Java Web開發者,在涉及到相應的專案中,不可能再去將相應的類庫用Java重寫。這時,就需要通過Java程式碼去呼叫C/C++的類庫來完成工作。 操作環境: - JDK 1.8.