C++開源庫列表

包管理器

conanphp

vcpkghtml

build2node

cgetpython

huntermysql

通用

Boost - 大量通用庫的聚集( Boost 許可)react

GSL - Guideline Support Library 實現,爲 Bjarne Stroustrup, Herb Sutter 和 Co 在《 C++ 核心方針》中推薦linux

BDE - 來自 Bloomberg L.P. 的 Bloomberg Development Environment 核心庫( Apache 許可)ios

Dlib - 網絡、線程、圖形用戶界面、數據結構、線性代數、機器學習、 XML 及文本分析、數值優化、貝葉斯網絡和大量其餘任務( Boost 許可)nginx

JUCE - 擴展性的成熟跨平臺 C++ 工具套( GPL 許可)git

Loki - 設計模式

Reason - xml 、 xpath 、正則表達式、線程、接頭、 http 、 sql 、日期時間、流、編碼與解碼、文件系統、壓縮( GPL 許可)

yomm2 - C++17 的開放式多方法( Boost 許可)

Folly - Facebook 開源庫。設計帶有構思中的實踐性和效率設計的 C++11 組件庫。

Abseil - Google 設計以補足 C++ 標準庫的開源 C++ 庫代碼聚集。

cxxomfort - C++ 特性逆向移植( C++11 到 C++03 及 C++1y 提案到 C++11/C++03 )。

libsourcey - 高速網絡化和多媒體編碼的跨平臺 C++11 庫。 HTTP 、 WebSockets 、 TURN 、 STUN 、 Symple 及更多……

OnPosix - 在 POSIX 平臺上提供各類抽象(例如線程、網絡化、日誌、 IPC 等)的 C++ 庫。

Ultimate++ - 跨平臺的迅速應用開發框架

CAF - C++ Actor Framework (CAF) 是開源的 C++11 行動者模型實現,特性爲輕量而快速的行動者實現、消息的模式匹配、網絡不可見消息傳遞及更多( BSD 許可)。

cpp-mmf - 對 POSIX 或 Windows 封裝映射到內存文件的 C++98 庫

CommonPP - 多用途庫,強調在項目中得出度規。 (BSD)

Better Enums - 反射性枚舉(枚舉到字符、迭代等),帶 constexpr 支持。 (BSD)

Smart Enum - 給你的枚舉 "to_string" 、 "from_string" 和更多。( Boost 許可)

nytl - 通用的 C++17 惟頭文件模板庫。( Boost 許可)

SaferCPlusPlus - SaferCPlusPlus - 不安全的 C++ 原始工具的安全兼容替換品,包括指針、 int 和 std::vector 。( Boost 許可)

fcppt - Freundlich 的 C++ 工具套 (fcppt) 是聚焦於經過提供更好的類型和函數式編程改進 C++ 代碼的庫聚集。

bitfield.h - 位域結構設施,比基礎語言設施更可移植/靈活。

composite_op.h - 基礎類數據成員自省,繁瑣且經常不可重入,但有時有用。

Abstract Intrusive Containers - 比 boost::intrusive 更靈活,但非 STL 兼容。

Yato - 現代 C++ (14/17) 的跨平臺 STL 風格及 STL 兼容庫,實現容器、範圍、迭代器、類型特性和其餘工具;行動者系統;類型安全配置接口( Apache-2.0 )

Kangaru - C++11 與 C++14 的依賴注入容器( MIT 許可)

yaal - 算法、聚集、任意精度計算、泛型 DSL 文法驅動分析器及更多 (CC BY-ND-NC 4.0)

gsl-lite - C++98 、 C++11 及後續版本的 ISO C++ Guideline 支持庫 (GSL) 的單文件惟頭文件版本。

nonstd-lite - *-lite 倉庫的親屬,將 C++11 後特性移植到古代 C++ 環境的遷移路徑。

units - 編譯時惟頭文件的量綱分析及單位轉換庫,創建於 C++14 而無依賴。

交互

sockpp - 簡單的現代 C++ 套接庫

restbed - 設計以嵌入到寬範圍的應用中的 C++ 爲框架。

C++ REST SDK - 異步 HTTP 客戶端及監聽器、異步 Stream 、 URI 、 JSON

cpr - 現代 C++ HTTP 請求庫

cpp-netlib - cpp-netlib : C++ 網絡庫

tacopie - C++11 TCP 庫

Boost.Asio - 異步及同步網絡、定時器、序列 I/O

Boost.Beast - 創建於 Boost.Asio 頂上的 HTTP 及 WebSocket 庫

gsoap - XML 數據綁定、快速 WSDL/SOAP/XML 網絡服務、 WS 安全、 JSON/XML-RPC RESTful 服務的 C/C++ 開發工具套

POCO - 網絡:加密、 HTTP ; ZIP 文件

omniORB - 最快速、完整而可移植的 CORBA ORB 在 C++ 中的實現

ACE - 異步網絡、多路分離、報文發送

TAO - CORBA

wvstreams

Unicomm - 異步網絡、高層 TCP 交互框架

restful_mapper - 於 C++ 中消費 RESTful JSON API 的 ORM

zeromq - 快速消息隊列

curlpp - CURL 庫的 C++ 包裝

Apache Thrift - Apache Thrift 軟件框架,用於規模可變的跨語言服務開發,將軟件棧與代碼生成引擎結合,構建有效而無縫地在 C++ 、 Java 、 Python 、 PHP 、 Ruby 、 Erlang 、 Perl 、 Haskell 、 C# 、 Cocoa 、 JavaScript 、 Node.js 、 Smalltalk 、 Ocaml 、 Delphi 及其餘語言間工做的服務。

libashttp - 異步 HTTP 客戶端庫

Simple C++ REST library - 在你的 C++ 應用中建立 REST API 的很是簡單且自成文檔的庫

libtins - 網絡包裝製做及嗅探庫

PcapPlusPlus - 多平臺 C++ 網絡嗅探和包裝分析及製做框架

HTTPP - 簡單、生產就緒的構建在 Boost 上的 HTTP 服務器,及構建在 libcurl 上的客戶端。 (BSD)

The Silicon C++14 Web Framework - 快速而穩健的 Web APIs (MIT) 。

ngrest - 快速而簡易的利用 JSON 的 RESTful 網絡服務框架 (Apache2) 。

restc-cpp - 將痛苦從自 C++ 訪問 JSON API 帶走。 HTTP 客戶端,原生 C++ 類到/自 JSON 的序列化,經過 boost::asio coroutines 攜程的異步 IO 。 C++14 。 (MIT)

OpenDDS - DDS 實現

Breep - 基於事件、高層、點對點庫,容許用戶直接發送和接收對象。

uvw - 現代 C++ 書寫的 libuv

rest_rpc - 現代、簡單、易用的 rpc 框架

EasyHttp - 跨平臺的 HTTP 客戶端庫,專一於可用性和速度,支持 http 響應緩存及更多( MIT 許可)

nghttp2 - HTTP/2 C 庫及工具(服務器、客戶端、代理和評測工具)( MIT 許可)

IXWebSocket - 無依賴的開源 WebSocket + HTTP 庫,支持 SSL 和逐條消息 deflate 的 WebSocket 擴展。

KCP - 快速可靠的 ARQ 協議,幫助應用減小網絡延遲。( MIT 許可)

圖形用戶界面

Dear ImGui - 高度優化的不膨脹的圖形用戶界面庫。

FLTK

nana[doc] - 用現代 C++ 風格的 GUI 編程( Boost 許可)

nanogui[doc] - 最小化的跨平臺器件庫,適用於 OpenGL 3.x 或更高版本

WxWidgets[src][doc]

OWLNext - 對 OWL 的,用於在 Windows 上以標準 C++ 書寫 GUI 應用的現代更新

tiny file dialogs - 單個 C C++ 跨平臺文件(無初始化、無 main 循環、 6 種形態的函數調用)

CopperSpice

CopperSpice[src][doc] - CopperSpice 是用於開發跨平臺軟件應用的 C++ 庫集合。它在 LGPL V2.1 許可下發布。它使用現代理念的 C++ 並與 STL 無縫結合。 CopperSpice 派生自 Qt 框架。

CsSignal - 獨立的 C++ 具線程信號/槽庫

CsString - 獨立的 C++ 具 Unicode 字符串庫

libGuarded - 獨立的 C++ 多線程庫,用於管理對共享數據的訪問

GTK+

glibmm

gtkmm

goocanvasmm

libglademm

libgnomecanvasmm

webkitgtk

flowcanvas

evince

Qt

Qt[src][doc]

qwtplot3d

qwt5 - 技術應用到 Qt Widgets

libdbusmenu-qt

QuickQanava - 直接在 Qt/QML 應用中畫圖的 C++14 庫;項目主頁: https://www.qanava.org

QuickProperties - QObject/QtObject 屬性編輯的 C++/QML 庫;項目主頁: https://www.qanava.org

通用多媒體

SFML (Simple and Fast Multimedia Library)

SDL (Simple DirectMedia Layer) - 對音頻、鍵盤、鼠標、操縱桿及圖形硬件,經由平臺上圖形 API (一般爲 OpenGL 或 Direct3D )的跨平臺低層訪問( zlib 許可)

SIGIL (Sound, Input, and Graphics Integration Library) - 文本、形狀、輸入、音頻及 2D 圖像的難以置信地簡單的跨平臺極簡庫

Cinder

openFrameworks

圖形

cairomm

nux

pangomm

gegl

stb

Adobe/boost GIL - 高層通用庫,聚焦於 2D 圖像上操做的算法。很是有限定 I/O 選項。

GraphicsMagick - 讀、寫、操縱 88 種主要格式的圖像。於 2002 年分化自 ImageMagick

Skia Graphics Engine - Google 從 2005 年起的圖形庫,用於 Chrome 、 Chrome OS 、 Android 還有 Firefox 和 Sublime Text enwiki:Skia_Graphics_Engine

Anti-Grain Evolution - 跨平臺 2D 光柵化及繪圖引擎

打點

plotutils

格式

libraw

openexr

qimageblitz

imagemagick

djvulibre

poppler

SVG++

音頻

soundtouch

KFR - 快速的現代 DSP 框架、 DFT/FFT 、 Audio 重採樣、 FIR/IIR 濾波器、雙二階

Aquila - 跨平臺 DSP 庫

指紋識別

chromaprint

libofa

libmusicbrainz

格式

audiofile

flac

標籤

id3lib

taglib

CD

libkcompactdisc

圖像處理

opencv

dlib

ITK

OTB

視頻

crystalhd

mjpegtools

libmatroska

libVLC

gstreamermm

3D 圖形

Vulkan

OpenGL

bgfx - 跨平臺、不知圖形 API 、「帶來你本身的引擎/框架」風格的製圖庫。

Ogre3D

Diligent Engine - 現代跨平臺低層 3D 圖形庫。

GLEW - OpenGL 功能加載

GLAD - 可定製的輕量庫,用於加載 OpenGL 功能

Epoxy - GLEM 的現代後繼者。在 GL 環境的一些種類間抽象,這使得有時比使用 GLEW 更加單。自 2015 起爲 GTK+ 項目所用。

GLFW - OpenGL 窗口管理器

GLM - 製圖用的惟頭文件 C++ 數學庫

hlsl++ - 使用 hlsl 語法的惟頭文件 C++ 渲染庫。支持 SSE 和 NEON

assimp - 3D 模型加載

VTK

Magnum - 遊戲和數據可視化的輕量模塊化的 C++11/C++14 圖形中間件

Irrlicht

Horde3D

Visionaray - C++ 光束追蹤模板庫

Open CASCADE - 3D CAD/CAM/CAE 應用的 SDK

OpenSceneGraph

遊戲引擎架構

EntityX

Anax

EntityPlus

EnTT

BOX2D - 物理引擎

國際化

IBM ICU

gettext

spirit-po - 快速的惟頭文件庫,分析 po 文件,並提供相似 GNU libintl 的接口。基於 boost::spirit 。

數學

stats++ - 先進、普遍的統計軟件:數據收集及預處理、統計、機器學習及優化,擁有開放的 C++ 源碼。

StatsLib - 統計分佈函數的模板化惟頭文件庫。

alglib

ArrayFire High Performance Computation Library

GNU MP bignum C++ interface

BigNumber - 建立和計算任意長度整數的 C++ 類

Boost.Multiprecision

Boost.Math.Special Functions and Statistical Distributions

Boost.Random

NTL - A Library for doing Number Theory

cpp-measures - 處理物理度量的惟頭文件 C++11 庫

G+Smo - 等幾何分析的跨平臺庫

C++ Matrix - 高性能且精確(例如極端狀況)的矩陣數學庫,帶表達式模板算術運算符

Exact floating-point arithmetic library

RPNX Uniform Smooth Noise - N 維均勻分佈的平滑噪聲函數,以 C++ 實現。

C++數學計算庫集合

C++中各大有名的科學計算庫

線性代數

Boost.uBLAS

Eigen

Armadillo

Blitz++

IT++

Dlib - linear algebra tools

Blaze

ETL

DecompLib - 惟頭文件的 C++11 庫,分解向量爲正定加權基向量的集合。

優化

OptimLib - 非線性函數數值優化方法的 C++11 庫。

圖論

Boost.Graph

LEMON

OGDF - Open Graph Drawing Framework

NGraph - a simple (Network) Graph library in C++

GTpo - C++14 泛型圖拓撲庫,帶 Protocol Buffer 序列化;項目主頁: https://www.qanava.org

數的類庫

cln

Universal - 通用數算術的 C++ 模板庫,取代 IEEE 浮點( MIT 許可)

機器學習

stats++

liblinear

Dlib - 機器學習工具

MLPACK - 機器學習包

Shogun - 大規模機器學習工具箱

FANN - 快速人工神經網絡庫

計算幾何

CGAL - 計算幾何算法庫

Wykobi - 計算幾何庫

PCL - 點雲庫

自動化理論

yasmine - C++11 UML state machine framework[src][doc]

物理與模擬

ReactPhysics3D - 進行 3D 模擬與遊戲的 C++ 物理引擎

ProjectCHRONO - 開源多物理模擬引擎

Bullet - 遊戲、視覺效果、機器人及加固學習的物理模擬

金融計算

QuantLib - Quantitative finance library

DataFrame - C++ DataFrame —— 現代 C++ 中使用原生類型、連續內存存儲,且無虛函數的 R 與 Pandas 數據框架。

併發

Intel TBB

OpenMP

Cpp-Taskflow - 帶任務依賴的快速 C++ 並行編程

RaftLib - 相似併發行動者的 C++ 流

Thrust - CUDA 的仿 STL 算法及數據結構

ViennaCL - 帶 OpenMP 、 CUDA 及 OpenCL 後端的線性代數及算法

VexCL - OpenCL 和 CUDA 的 C++ 表達式模板庫

Boost.Compute - (非官方) OpenCL 的仿 STL 算法及數據結構

Boost.Interprocess

Boost.Thread

Boost.Atomic

Boost.Lockfree

Boost.MPI

Boost.Context

libopenmpi

libsimdpp

HPX - 任何規模的並行和分佈式應用的通用 C++ 運行時系統

KOKKOS - C++ 中的編程模型,用於書寫高性能的便攜 HPC 應用

SObjectizer - 經過行動者和出版訂閱模型,簡化開發併發和事件驅動應用的 C++ 中的小型框架。

BlockingCollection - C++11 線程安全聚集類,模仿 .Net BlockingCollection 。

容器

Boost.Any

Boost.Array

Boost.Bimap

Boost.Container

Boost.Fusion

Boost.Heap

Boost.Pointer Container

Boost.Tuple

Boost.Variant

cpp-btree - btree_map 、 btree_set 、 btree_multimap 、 btree_multiset 。

TdhLists

strict_variant - 快速而決不空的 variant ,目標 C++11 。阻止許多不想要的隱式轉換。

eggs::variant - Eggs.Variant 是 C++11/14 的泛型、線程安全、有區別的聯合體。值得注意的是它有很好的 constexpr 支持。

Ygg - 高性能容器和數據結構,例如紅黑樹、區間數和區間映射的侵入式 C++11 實現。

plf::list - std::list 實現,爲緩存友好犧牲範圍切割,致使更快的插入、擦除和迭代。

plf::stack - std::stack 容器適配器的隨意訪問替換容器,在棧環境中有優於 std::vector 和 std::deque 的性能。

plf::colony - 無序的「類揹包」容器,在高度修改場景中性能優於 std:: 容器,同時維護指向未被擦除元素的合法指針,無關乎插入或擦除。

ring_span - Guy Davidson 與 Arthur O'Dwyer 的 ring_span ——即環狀緩衝區視圖的簡化實現。

Frozen - constexpr 完美基於哈希的凍結集合與映射( Apache 2.0 )。

DataFrame - C++ DataFrame —— 現代 C++ 中使用原生類型、連續內存存儲,且無虛函數的 R 與 Pandas 數據框架。

元編程

Boost.MPL - 原初元編程庫,目標爲 C++03 ,慢

Boost.Hana - 類型與值的新元編程庫

Boost.Mp11

Boost.CallableTraits

Metal - 使用餓元函數, 100% SFINAE 友好

Brigand - 使用餓元函數,爲最佳性能優化

Meta - 使用餓元函數,在 metal 和 brigand 之間,相對於性能妥協

Boost.Metaparse - 編譯時分析器庫,從編譯時字符串產生類型、值和元函數

Boost.Proto - 構建基於表達式模板的 EDSLs 的庫

CoMeta - 輕量、惟頭文件的 C++14 元編程庫

visit_struct - 小規模反射庫,提供 C++11 的結構體觀察器。自容納, 100-200 行代碼,取決於如何計算。

序列化

Boost.Serialization

libs11n

sweet_persist

protobuf

gSOAP - 準確的 XML 序列化

ai-xml - 經過添加單個最小的函數到類,在 XML 間序列化及反序列化。在底層使用 libxml++ 。

C++ XML objects

yaml-cpp

YAS (Yet Another Serialization)

cereal (C++11 serialization)

jios (JSON serialization)

ThorsSerializer (JSON/YAML Input Output Streams)

cppcodec - 惟頭文件庫,編碼/解碼 base64 、 base32 和十六進制,有一致而靈活的 API ( MIT 許可)

iguana (universal serialization engine)

rpnx-serial - 能(反)序列化如 std::map 、 std::vector 等類型的庫

測試

Boost.Test

cppunit

Google Test

Catch2

doctest - 單元測試和 TDD 使用的最輕量的特性豐富的 C++ 單頭文件測試框架

lest - 現代的 C++11 原生的單文件惟頭文件的輕量單元測試、 TDD 和 BDD 框架(包含 C++98 變體)。

liblittletest - 可移植,單個惟頭文件的測試框架

ELFspy - 杜絕假象和間諜的測試 - 僅 Linux

xtd.tunit - Windows 、 macOS 、 Linux 、 iOS 和 Android 上的現代 C++17 單元測試庫。官方網站

bandit - C++11 的對人類友好單元測試

性能評測

Celero

gperftools - 「谷歌性能工具」包含高性能、多線程的 malloc 實現加上評測堆分配和 CPU 利用的工具。

plf::nanotimer - 用於性能評測的最低開銷、跨平臺的簡單定時器類。

XML

libxml++

pugixml

tinyxml

tinyxml2 - 另外一 TinyXML ,建設中。

Xerces

gSOAP - XML 數據綁定

JSON

json - 現代 C++ 的 JSON

ArduinoJson - ArduinoJson

jsonme--

ThorsSerializer (JSON/YAML Input Output Streams)

JsonBox

jsoncpp

zoolib

JOST

CAJUN

libjson

nosjob

rapidjson

jsoncons - JSON 與類 JSON 數據結構,含 JSON Pointer 、 JSON Patch 、 JSONPath 、 CSV 、 MessagePack 、 CBOR 、 BSON 、 UBJSON 的惟頭文件庫。

JSON++

qjson

json-cpp

jansson - Jansson 是編碼、解碼及操縱 JSON 數據的 C 庫。

json11 - json11 是 C++11 的輕量 JSON 庫,提供 JSON 分析及序列化。

JSON Voorhees - C++ 的殺手 JSON

jeayeson - 很是健全的(惟頭文件) C++14 JSON 庫

ujson - µjson 是小型的 C++11 、 UTF-8 , JSON 庫

minijson - C++ 無 DOM 且免分配的 JSON 分析及序列化

jios (JSON Input Output Streams)

Web

libmusicbrainz5

liblastfm

libkcddb

Chromium Embedded

QtWebApp - Java Servlets 所啓發的 HTTP(s) Server ,以 C++ 實現

Wt[src][doc]

Tufão

libhttpserver

cpp-jwt

oatpp - 用於建立高性能網絡服務的輕量零依賴框架

GPS

gpsd

數據庫

redis-plus-plus - 用C++ 11編寫的Redis客戶端, 支持Redis Sentinel,Redis Cluster,管道,事務,發佈訂閱,鏈接池以及相似於STL的接口

cpp-redis - C++11 輕量的 Redis 客戶端:異步、線程安全、無依賴、管道化、多平臺。

OTL

DTL

libpqxx

lmdb++ - LMDB 嵌入式 B+ 樹數據庫的 C++11 包裝。

mongocxx - MongoDB 的 C++11 驅動庫

mysql++

ODB - C++ Object-Relational Mapping (ORM)

Pgfe - PostGres FrontEnd - 現代 C++ 客戶端 API 到 PostgreSQL

QUINCE: QUeries IN C++ Expressions (ORM+EDSL)

QxOrm - C++ Qt Object-Relational Mapping (ORM)

SOCI

sqlpp11

SQLAPI++

EasyQtSql - 輕量惟頭文件 C++11 庫,用 QtSql 快速便捷地進行 SQL 查詢

密碼學

Botan

gnutls

openssl

crypto++

TomCrypt

文件元數據

libkexiv2

exiv2

exempi

rarian

文本

分析

PEGTL - 分析表達式文法的模板庫

BNFlite - 僅單個頭文件的輕量文法分析器庫

搜索

clucene

xapian

Step - Ukkonen 的構建後綴樹在線算法, Manber 的構建後綴數組算法。

模板引擎

inja - 現代 C++ 的模板引擎

終端

cwidget

replxx - readline 和 libedit 的替換品,支持 UTF-8 、語法高亮和提示。

配置

gconfmm

libconfig

libconfini - INI 分析器

Boost.Program_options

嵌入語言綁定

ChaiScript

ExprTk

lua

sol2

AngelScript - 相似 C++ 的腳本語言。

mozjs

muparser

PythonQt

ScriptCaller - 容許程序員調用 Ruby 腳本的惟頭文件庫。

嵌入式/實時

QP/C++ - RTOS 內核,雙重 GPL

ETL - Embedded Template Library - C++03 ,爲少資源平臺裁剪的可移植模板庫

distortos - 微控制器的面向對象 C++ RTOS

µcuREST - 微控制器的 C++11 REST/JSON 服務器框架

PDF

HARU

PoDoFo

JagPDF

日誌

Log4cpp - 用於靈活地記錄到文件、系統日誌、 IDSA 或其餘目標的 C++ 類庫 (LGPL)

Log4cplus - 日誌 API ,提供日誌管理及配置上的線程安全、靈活且有任意粒度的控制。

spdlog - 超快的惟頭文件 C++ 日誌庫

plog - C++ 的可移植且簡單的日誌,少於 1000 行代碼 (MPL2)

Boost.Log

glog - Google 日誌庫

log4cxx - Apache log4cxx 是 Apache log4j 後的 C++ 模式化記錄框架

Pantheios - 診斷日誌 API 庫,提供類型安全、效率、泛型和可擴展性的結合

Backward - 打印漂亮的 Python 風格棧追蹤,帶顏色和源代碼片斷,特別是在崩潰時( MIT 許可)。

logging,中文翻譯連接

排序

Timsort - 模板化的穩定排序函數,對於逆序或半排序的數據,性能優於基於快速排序的算法,包括 std::sort 。 (MIT)

標準庫

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 :很是緊湊的數據流壓縮庫

zstd:一款快速實時的開源數據壓縮程序,由Facebook開發

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協議的安全通訊庫

LibreSSL:免費的SSL/TLS協議,屬於2014 OpenSSL的一個分支

cryptopp:免費的C++加解密庫

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 庫

libjpeg :libjpeg是一個被普遍使用的JPEG解碼、JPEG編碼和其餘的JPEG功能的實現庫。

libpng:提供瞭解析png所須要的方法。

ITK:跨平臺的開源圖像分析系統

Magick++:ImageMagick程序的C++接口

MagickWnd:ImageMagick程序的C++接口

OpenCV : 開源計算機視覺類庫

OpenGL:開源圖形庫

OpenGL擴展:glew,assimp,glew,libktx

tesseract-ocr:OCR引擎

VIGRA :用於圖像分析通用C++計算機視覺庫

VTK :用於3D計算機圖形學,圖像處理和可視化的開源免費軟件系統。

國際化

gettext :GNU `gettext’

IBM ICU:提供Unicode 和全球化支持的C、C++ 和Java庫

libiconv :用於不一樣字符編碼之間的編碼轉換庫

ICU :國際化組件

Jason

frozen : C/C++的Jason解析生成器

Jansson :進行編解碼和處理Jason數據的C語言庫

jbson :C++14中構建和迭代BSON data,和Json 文檔的庫

JeayeSON:很是健全的C++ JSON庫,只包含頭文件

JSON++ : C++ JSON 解析器

jasoncpp : 同JASON++?

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:高級網絡編程的開源庫集合

curl:利用URL語法在命令行下工做的文件傳輸工具

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框架。

webcocketpp :開源跨平臺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 :機器人操做系統,提供了一些庫和工具幫助軟件開發人員建立機器人應用程序。

科學計算

FFTW :用一維或者多維計算DFT的C語言庫。

GSL:GNU科學庫。

腳本

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++容器的打印庫

dlt-daemon :守護進程

DynaPDF :易於使用的PDF生成庫

gcc-poison :幫助開發人員禁止應用程序中的不安全的C/C++函數的簡單的頭文件。

googlemock:編寫和使用C++模擬類的庫

HTTP Parser :C的http請求/響應解析器

libcpuid :用於x86 CPU檢測盒特徵提取的小型C庫

libevil :許可證管理器

libusb:容許移動訪問USB設備的通用USB庫

mecab:日語分詞工具

PCRE:正則表達式C庫,靈感來自於Perl中正則表達式的功能。

Remote Call Framework :C++的進程間通訊框架。

Scintilla :開源的代碼編輯控件

Serial Communication Library :C++語言編寫的跨平臺,串口庫。

sqlitends:導航數據庫操做的接口

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 :來自維基百科的靜態代碼分析工具列表

值得學習的C語言開源項目

Libevent

libev是一個開源的事件驅動庫,基於epoll,kqueue等OS提供的基礎設施。其以高效出名,它能夠將IO事件,定時器,和信號統一塊兒來,統一放在事件處理這一套框架下處理。基於Reactor模式,效率較高,而且代碼精簡(4.15版本8000多行),是學習事件驅動編程的很好的資源。

下載連接:https://github.com/libevent/libevent

Memcached

Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提供動態數據庫驅動網站的速度。Memcached 基於一個存儲鍵/值對的 hashmap。Memcached-1.4.7的代碼量仍是能夠接受的,只有10K行左右。
下載地址:https://memcached.org/

Redis

Redis 是一個使用 C 語言寫成的,開源的 key-value 數據庫。Redis支持的操做和數據類型比Memcached要多,如今主要用於緩存,支持主從同步機制,Redis的學習能夠參考<<Redis設計與實現>>一書。

下載地址:https://redis.io/

Webbench

Webbench是一個在linux下使用的很是簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問咱們設定的URL,測試網站在壓力下工做的性能,最多能夠模擬3萬個併發鏈接去測試網站的負載能力。Webbench使用C語言編寫, 代碼實在太簡潔,源碼加起來不到600行。

下載連接:https://github.com/LippiOuYang/WebBenchl

APR(Apache Portable Runtime)

這是由 Apache 社區維護的 C 開源庫,主要提供操做系統相關的功能(文件系統、進程、線程、用戶、IPC)。此外還提供了一些網絡相關的功能。

APR 原先是 Apache Web 服務器的一個組成部分,後來獨立出來,成爲一個單獨的開源項目。
主頁:https://apr.apache.org

NGINX

Nginx是由俄羅斯軟件工程師Igor Sysoev開發的一個高性能的HTTP和反向代理服務器,具有IMAP/POP3和SMTP服務器功能。Nginx最大的特色是對高併發的支持和高效的負載均衡,在高併發的需求場景下,是Apache服務器不錯的替代品。目前,包括新浪、騰訊等知名網站已經開始使用Nginx做爲Web應用服務器。
主頁:https://nginx.org/en/download.html

Tinyhttpd

tinyhttpd是一個超輕量型Http Server,使用C語言開發,所有代碼只有502行(包括註釋),附帶一個簡單的Client,能夠經過閱讀這段代碼理解一個 Http Server 的本質。

下載連接:https://github.com/LippiOuYang/Tinyhttpd

CJSON

CJSON是C語言中的一個JSON編解碼器,很是輕量級,C文件只有500多行,速度也很是理想。
CJSON也存在幾個弱點,雖然功能不是很是強大,但CJSON的小身板和速度是最值得讚揚的。其代碼被很是好地維護着,結構也簡單易懂,能夠做爲一個很是好的C語言項目進行學習。

項目主頁:https://sourceforge.net/projects/cjson/

CMockery

cmockery是google發佈的用於C單元測試的一個輕量級的框架。它很小巧,對其餘開源包沒有依賴,對被測試代碼侵入性小。cmockery的源代碼行數不到3K,你閱讀一下will_return和mock的源代碼就一目瞭然了。
主要特色:

免費且開源,google提供技術支持;
輕量級的框架,使測試更加快速簡單;
避免使用複雜的編譯器特性,對老版本的編譯器來說,兼容性好;
並不強制要求待測代碼必須依賴C99標準,這一特性對許多嵌入式系統的開發頗有用
下載連接:https://code.google.com/p/cmockery/downloads/list

Lua

Lua很棒,Lua是巴西人發明的,這些都令我不爽,可是還不至於臉紅,最多眼紅。
讓我臉紅的是Lua的源代碼,百分之一百的ANSI C,一點都不摻雜。在任何支持ANSI C編譯器的平臺上均可以輕鬆編譯經過。我試過,真是一點廢話都沒有。Lua的代碼數量足夠小,5.1.4僅僅1.5W行,去掉空白行和註釋估計能到1W行。
下載地址:https://www.lua.org/

SQLite

SQLite是一個開源的嵌入式關係數據庫,實現自包容、零配置、支持事務的SQL數據庫引擎。 其特色是高度便攜、使用方便、結構緊湊、高效、可靠。足夠小,大體3萬行C代碼,250K。
下載地址:https://www.sqlite.org/

UNIX v6

UNIX V6 的內核源代碼包括設備驅動程序在內 約有1 萬行,這個數量的源代碼,初學者是可以充分理解的。有一種說法是一我的所能理解的代碼量上限爲1 萬行,UNIX V6的內核源代碼從數量上看正好在這個範圍以內。看到這裏,你們是否是也有「若是隻有1萬行的話沒準兒我也能學會」的想法呢?
另外一方面,最近的操做系統,例如Linux 最新版的內核源代碼聽說超過了1000 萬行。就算不是初學者,想徹底理解所有代碼基本上也是不可能的。
下載地址:https://minnie.tuhs.org/cgi-bin/utree.pl?file=V6

NETBSD

NetBSD是一個免費的,具備高度移植性的 UNIX-like 操做系統,是現行可移植平臺最多的操做系統,能夠在許多平臺上執行,從 64bit alpha 服務器到手持設備和嵌入式設備。NetBSD計劃的口號是:」Of course it runs NetBSD」。它設計簡潔,代碼規範,擁有衆多先進特性,使得它在業界和學術界廣受好評。因爲簡潔的設計和先進的特徵,使得它在生產和研究方面,都有卓越的表現,並且它也有受使用者支持的完整的源代碼。許多程序均可以很容易地經過NetBSD Packages Collection得到。

下載地址:https://www.netbsd.org/

值得學習的C++開源項目

LevelDb

LevelDb是谷歌兩位大神級別的工程師發起的開源項目,簡而言之,LevelDb是可以處理十億級別規模Key-Value型數據持久性存儲的C++ 程序庫。
它是一個持久化存儲的KV系統,和Redis這種內存型的KV系統不一樣,LevelDb不會像Redis同樣狂吃內存,而是將大部分數據存儲到磁盤上。
  其次,LevleDb在存儲數據時,是根據記錄的key值有序存儲的,就是說相鄰的key值在存儲文件中是依次順序存儲的,而應用能夠自定義key大小比較函數,LevleDb會按照用戶定義的比較函數依序存儲這些記錄。

主頁:https://github.com/google/leveldb

Boost.Asio

它是異步輸入輸出的核心。 名字自己就說明了一切:Asio 意即異步輸入/輸出。該庫可讓 C++ 異步地處理數據,且平臺獨立。異步數據處理就是指,任務觸發後不須要等待它們完成。相反,Boost.Asio 會在任務完成時觸發一個應用。異步任務的主要優勢在於,在等待任務完成時不須要阻塞應用程序,能夠去執行其它任務。

異步任務的典型例子是網絡應用。若是數據被髮送出去了,好比發送至 Internet,一般須要知道數據是否發送成功。 若是沒有一個象 Boost.Asio 這樣的庫,就必須對函數的返回值進行求值。可是,這樣就要求待至全部數據發送完畢,並獲得一個確認或是錯誤代碼。而使用 Boost.Asio,這個過程被分爲兩個單獨的步驟:第一步是做爲一個異步任務開始數據傳輸。 一旦傳輸完成,不論成功或是錯誤,應用程序都會在第二步中獲得關於相應的結果通知.主要的區別在於,應用程序無需阻塞至傳輸完成,而能夠在這段時間裏執行其它操做。

主頁:https://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html

SGI STL

SGI STL是STL代碼的經典實現版本,雖然不少編譯器不直接使用這個版本,可是不少卻在此基礎之上進行改進的。好比GNU C++的標準庫就是在此基礎之上改進的。這份代碼還有一個好處是有註釋,代碼書寫很是規範,只要花些時間讀懂它並不是難事。

主頁:https://www.sgi.com/tech/stl/download.html

Muduo

muduo 是一個基於 Reactor 模式的現代 C++ 網絡庫,它採用非阻塞 IO 模型,基於事件驅動和回調,原生支持多核多線程,適合編寫 Linux 服務端多線程網絡應用程序。

主頁:https://github.com/chenshuo/muduo

參考連接:
https://www.ezlippi.com/blog/2014/12/c-open-project.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
https://zh.cppreference.com/w/cpp/links/libs

相關文章
相關標籤/搜索