摘要:C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。
本文是关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz发起和维护,并追加本人学习工作中地图技术研究相关的库。内容包括:标准库、框架、人工智能、异步事件和循环、音频、生物学、BitTorrent、命令行界面、压缩、并发性、配置文件、容器、。注:部分资源链接需要外部网络。(2019-12-01版本)
标准库(Standard Libraries)
- C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。
- Standard Template Library:标准模板库。(STL)
- C POSIX library:POSIX系统的C标准库规范。
- ISO C++ Standards Committee:C++标准委员会。
- The GNU C Library:GNU系统核心库。
框架
C++通用框架和库
- abseil-cpp:Abseil C++ 通用库。[Apache2]
- Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合。 [Apache2]
- APR:一个实用程序函数库,有跨平台、可移植、运行时的特点,由Apache开发。[Apache2]
- ASL:Adobe源代码库提供了同行的评审和可移植的C++源代码库。[MIT]
- Boost:大量通用C++库的集合。[Boost]
- BDE:来自于彭博资讯实验室的开发环境。[Apache2]
- Cinder:提供专业品质创造性编码的开源开发社区。[BSD]
- Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。[MIT]
- Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。[Boost]
- EASTL:EA-STL公共部分。[BSD]
- ETL:[MIT]
- ffead-cpp:企业应用程序开发框架。[Apache2]
- Folly:由Facebook开发和使用的开源C++库。[Apache2]
- FunctionalPlus:C++的函数编程库,编写简洁易读的C++代码。[MIT]
- GLib:GLib为用C编写的库和应用程序提供核心应用程序构建块。[LGPL]
- JUCE:包罗万象的C++类库,用于开发跨平台软件。[ISC]
- libPhenom:用于构建高性能和高度可扩展性系统的事件框架。[Apache2]
- LibSourcey:用于实时的视频流和高性能网络应用程序的C++11 evented IO。[LGPL]
- LibU:C语言写的多平台工具库。[BSD]
- Loki:C++库的设计,包括常见的设计模式和习语的实现。[MIT]
- MiLi:只含头文件的小型C++库。[Boost]
- OpenFrameworks:开发C++工具包,用于创意性编码。[MIT]
- Qt:跨平台的应用程序和用户界面框架。[GPL/LGPL/Commercial]
- Reason:跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。[GPL2]
- ROOT:具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。[LGPL]
- STLport:是STL具有代表性的版本。[Free]
- STXXL:用于额外的大型数据集的标准模板库。[Boost]
- tbox:一个类似glib的多平台c库。[Apache2]
- Ultimate++:C++跨平台快速应用程序开发框架。[BSD]
- uSTL:轻量级C++ STL库。[MIT]
- Windows Template Library :用于开发Windows应用程序和UI组件的C++库。[Public]
- Yomm2:C++11的开放multi-methods。[Boost]
人工智能(Artificial Intelligence)
- ANNetGPGPU:一个基于GPU(CUDA)的人工神经网络库。[LGPL]
- btsk:游戏行为树启动器工具。[zlib]
- Evolving Objects:基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。[LGPL]
- frugally-deep:Keras模型C++库,仅由头文件。[MIT]
- Genann:C语言中的简单神经网络库。[zlib]
- MXNet:简单轻量级的C语言神经网络库,具有可移植,灵活的分布式、移动深度学习,动态的、可变异的数据流的特点;适用于Python、R、Julia、Scala、Go、Javascript。
- PyTorch:Python版本,基于强GPU加速的张量和动态神经网络。
- Recast/Detour:(3D)导航网格生成器和探路器,主要用于游戏。[zlib]
- TensorFlow:用数据流图进行数值计算的开源软件库。[Apache]
- CNTK:Microsoft认知工具包(CNTK),一个开源的深度学习工具包。[Boost]
- tiny-dnn:C++11中的一个仅头的无依赖性深度学习框架。[BSD]
- Veles:面向快速深度学习应用开发的分布式平台。[Apache]
- Kaldi: 语音识别工具包。[Apache]
异步事件循环
- Asio:一个跨平台的C++库,用于网络和低级I/O编程,为开发人员提供一致的异步模型。[Boost]
- Boost.Asio:用于网络和底层I/O编程的跨平台的C++库。[Boost]
- C++ Actor Framework:Actor模型在C++中的开源实现。[BSD-3-Clause]
- libev:功能齐全,高性能的时间循环,轻微地仿效libevent,但是不再像libevent一样有局限性,也修复了它的一些bug。[BSD and GPL]
- libevent:事件通知库。[BSD]
- libuv:跨平台异步I/O。[BSD]
- promise-cpp:标准Promise/A+的C++实现。[Anti-996]
- uvw:libuv的C++封装。[MIT]
音频
音频,声音,音乐,数字化音乐库
- FMOD:易于使用的跨平台的音频引擎和音频内容的游戏创作工具。[Free for non-commercial/Commercial]
- KFR:快速,C++DSP框架,FFT,FIR/IIR滤波器,采样率转换。[GPL/Commercial]
- libsndfile:带有C++封装的C库,用于通过一个标准库接口读写包含采样声音的文件。[LGPL-2.1]
- libsoundio:用于实时跨平台音频输入和输出的C库。[MIT]
- Maximilian:C++音频和音乐数字信号处理库。[MIT]
- OpenAL:开源音频库—跨平台的音频API。[BSD/LGPL/Commercial]
- miniaudio:单文件音频播放和捕获库。[Unlicense]
- Opus:一个完全开放的,免版税的,高度通用的音频编解码器。[BSD]
- PortAudio:一个免费的、跨平台的、开源的音频I/O库。[MIT]
- SELA:简单无损音频。[MIT]
- SoLoud:简易便携式游戏音频引擎。[zlib]
- Speex:免费编解码器,为Opus所废弃。[BSD]
- Tonic:C++易用和高效的音频合成。[Unlicense]
- Vorbis:一种完全开放的、非专有的、无专利和版税的通用压缩音频格式。[BSD]
- minimp3:仅头文件的MP3解码器,with clean-room实现。[CC0]
- Verovio:Ogg Vorbis是一种完全开放的,非专有的,免版税的通用压缩音频格式。[BSD]
- Wav2Letter++:一个完全用C++编写的快速开源语音处理工具包,使用ArrayFire tensor库和flashlight机器学习库以获得最大的效率。[BSD]
生物学(Biology)
生物信息,基因组学和生物技术
- BioC++:生物信息学的C++计算文库。[BSD]
- Chaste:一个开源C++库,用于计算生理学和生物学的数学模型。[BSD]
- libsequence:用于表示和分析群体遗传学数据的C++库。[GPL]
- SeqAn:专注于生物数据序列分析的算法和数据结构。[BSD/3-clause]
- Vcflib:用于解析和处理VCF文件的C++库。[MIT]
- Wham:直接把联想测试应用到BAM文件的基因结构变异。[MIT]
BitTorrent协议(BitTorrent)
- jech/dht:BitTorrent DHT C库。[MIT]
- libtorrent:(又名BorTorrent RestorBar)一个高效完整的C++ BitTorrent实现。[BSD]
- LibTorrent:(又名libtorrent rakshasa)BitTorrent库。[GPL]
- libutp:uTorrent传输协议库。[MIT]
命令行界面(Command-Line Interface)
控制台/终端用户界面,命令行界面
- Argh:一个极简的、无挫折感的、仅头头文件的参数处理程序。[BSD]
- Taywee/args:一个简单的仅头文件的C++参数解析器库。[MIT]
- Boost.Program_options:通过命令行和配置文件等常规方法获得程序选项的库。[Boost]
- Clara:一个简单易用的、可组合的、命令行解析器,用于C++ 11及其以上。[BSL-1.0]
- cli:交互式命令行接口的,跨平台仅有头文件的C++ 14库(Cisco style)。[Boost]
- CLI11:仅头文件的,简单或复杂的命名行参数解析C++11库。[BSD]
- jarro2783/cxxopts:轻量级C++命令行选项解析器。[MIT]
- docopt.cpp:从字符串解析生成选项解析器的库。[Boost]
- gflags:C++命令行参数库。[BSD]
- linenoise:readline和libedit的一种小型的独立替代品。[BSD-2-Clause]
- linenoise-ng:一个小型的、可移植的GNU readline替代品,用于Linux、Windows和MacOS,能够处理UTF-8字符。[BSD]
- Lyra:一个简单易用的、可组合的、命令行解析器,用于C++ 11及其以上。[Boost]
- Ncurses:终端用户界面。[MIT]
- PDCurses:源代码和预编译库都可用的公共域库,支持UTF-8、语法突出显示,可替换readline和libedit库,适用于Unix和Windows。[PublicDomain]
- TCLAP:一个成熟、稳定且功能丰富的库,用于定义和访问ANSI C++中的命令行参数。[MIT]
- termbox:用于编写基于文本的用户界面的C库。[MIT]
压缩
- bit7z:一个C ++静态库,为7-zip DLL提供一个简洁的接口。[GPLv2]
- Brotli:Brotli压缩格式,由谷歌开发。[MIT]
- bzip2:一个完全免费,免费专利和高质量的数据压缩。[BSD]
- FiniteStateEntropy:新一代熵编解码器,有限状态熵和Huff0。
- PhysicsFS:对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。[zlib]
- KArchive:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。[LGPL]
- libarchive:多格式存档和压缩库。[BSD]
- LZ4:非常快速的压缩算法。[BSD]
- LZFSE:压缩与命令行工具库,由苹果开发。
- LZHAM:无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。[BSD]
- LZMA:7z格式默认和通用的压缩方法。[PublicDomain]
- LZMAT:及其快速的实时无损数据压缩库。[GPL]
- miniz:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。[MIT]
- Minizip:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。[zlib]
- smaz:轻量级字符串压缩库。[BSD]
- Snappy:快速压缩和解压缩。[BSD]
- ZLib:非常紧凑的数据流压缩库。[zlib]
- zlib-ng:zlib的下一代系统,更新了一些重要的优化。[zlib]
- zstd:Z标准-快速实时压缩算法,由Facebook开发。[BSD]
- ZZIPlib:提供ZIP归档的读权限。[MPL/LGPL]
并发性
并发执行和多线程
- alpaka:并行内核库。[LGPLv3+]
- ArrayFire:通用GPU库。[BSD]
- Async++:一个轻量级C++ 11并发框架,灵感来自于微软PPL库和N328 C++标准提案。[MIT]
- Boost.Compute:用于OpenCL的C++GPU计算库。[Boost]
- Bolt:针对GPU进行优化的C++模板库。[Apache2]
- ck:并发原语、安全内存回收机制和非阻塞数据结构。[BSD]
- concurrentqueue:一个快速多生产者,多用户无锁并发队列的C++ 11。[BSD,Boost]
- Cpp-Taskflow:具有任务依赖性的快速C++并行编程。[MIT]
- CUB:CUB为CUDA编程模式的每一层提供了最先进、可重用的软件组件。[BSD]
- cupla:C++ API, 通过Alpaka,在OpenMP、线程、TBB、……上运行CUDA/C++。[LGPLv3+]
- C++React:用于C++11的反应性编程库。[Boost]
- FiberTaskingLib:基于任务的多线程库,支持具有任意依赖性的任务图。[Apache]
- Intel Games Task Scheduler:专为游戏开发人员需求而设计的任务计划框架。[MIT]
- Intel Parallel STL:英特尔C ++ 17 STL for C ++ 11及更高版本的实现。[Apache2]
- Intel TBB:Intel线程构件块。[Apache2]
- junction:并发数据结构的C ++库。[BSD]
- libcds:并发数据结构的C ++库。[BSD]
- Libclsph:基于OpenCL的GPU加速SPH流体仿真库。[MIT]
- libdill:在C中引入结构化并发。[MIT]
- libdispatch:苹果公司开发的Grand Central Dispatch(GCD)是基于线程池模式的任务并行技术。 libdispatch是一个提供GCD服务实现的库。[Apache-2.0]
- libmill:在C语言中引入Go风格的并发。[MIT]
- moderngpu:用于GPU上通用计算的生产力库。它是为CUDA编写的仅有头文件的C ++库。该库的独特价值在于其用于解决不规则并行问题的加速原语。[FreeBSD & Copyright, Sean Baxter]
- NCCL:用于多GPU通信的优化原语。[BSD]
- OpenCL:并行编程的异构系统的开放标准。
- OpenMP:OpenMP API。
- RaftLib:通过C++类操作符实现的C++库、流/数据流并发。[Apache2]
- readerwriterqueue:一种快速的单生产商单用户锁空闲队列。[BSD]
- Thrust:类似于C++标准模板库的并行算法库。[Apache2]
- transwarp:用于任务并发,只有头文件C++库。[MIT]
- HPX:用于任何规模的并行和分布式应用程序的通用C++运行时系统。[Boost]
- VexCL:用于OpenCL/CUDA 的C++向量表达式模板库。[MIT]
- Quantum:一个强大的C++协同程序调度框架,构建在boost::coroutines2.。
配置文件
配置文件,ini文件
- inih:C版本.INI文件解析器,简单,非常适合嵌入式系统。[BSD-3-Clause]
- inih:C++版本.INI文件解析器。[BSD-3-Clause]
- iniparser:.INI文件解析器。[MIT]
- libconfig:C/C++库用于处理结构化的配置文件。[LGPL-2.1]
- libconfuse:C版本小型配置文件分析器库。[ISC]
- simpleini:跨平台的C++库,提供了一个简单的API来读取和写入ini样式的配置文件。[MIT]
容器
- C++ B-tree:基于B树数据结构,实现命令内存容器的模板库。[Apache2]
- :
- :
- :