目录
能不用cpp就不用要用了
处理高并发的库
libevent:事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台
日志
glog:google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。
spdlog: logger库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是header only的.
PRC
gRPC:是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。
(鹅厂用的RPC:https://github.com/TarsCloud/Tars)
abseil:谷歌的库,可以看作是STL的扩充
OpenCV:视觉图像处理库
FFTW :号称最快的FFT!
深度学习:推荐Eigen,它也是tensorflow的基础组件之一。
嵌入式文件系统
buildroot:(文件系统搭建,强烈建议直接用buildroot,官网[http://buildroot.uclibc.org/]上有使用教程非常详细)文件系统通常要包含很多第三方软件,比如busybox,udhcpc,tftp,apache,sqlite,PHP,iptable,DNS等,为了避免繁杂的移植工作。buildroot应运而生。
- abseil-cpp
Abseil-cpp 传说是非 Google 官方开源的 C++ 基础库,收集/整理了 Google 众多 C++ 开源项目的基础库。可以认为和 Facebook folly 类似。 - gtest 和 gmock
Gtest 是 Google 开源的 C++ 单元测试框架,可以配合 gmock 使用。 - glog
Google 开源的日志库。 - protobuf
Protobuf 是 Google 开源的序列化、反序列化库。兼容性特别好。性能也还不错。 - leveldb
Leveldb 是 Google 开源的一个 LSM 存储引擎,代码质量比较高,是学习 C++ 不错的参考代码。 - rocksdb
Rocksdb 是 Facebook 开源的一个 LSM 存储引擎,最开始基于 leveldb 修改得到的。不过现在 rocksdb 可以说是青出于蓝而胜于蓝。 - braft
百度开源的 Raft 算法的 C++ 实现。 - rapidjson
腾讯开源的 C++ json 库。
链接:https://www.zhihu.com/question/51134387/answer/582057574
代码质量
深度学习库
caffe
HTTP 网络库
header-only 的 HTTP 网络库!!! s/c 端都支持一些常用方法。
效率跟 curl/cpp-netlib/cpprestsdk 之类的重器没得比,但胜在写 demo 之类的小东西很方便。
喏,一个服务端完整示例:
#include <httplib.h>
int main() {
httplib::Server svr;
svr.get("/fuck", [](auto &req, httplib::Response &res) {
res.set_content("SHIT!", "text/plain");
});
svr.listen("localhost", 80);
}
http客户端curl
http服务器 crow
gzip压缩zlib
json序列化nlohmann/json
二进制序列化protobuf
嵌入式数据库sqlite
日志库glog
参数解析库gflags
消息队列zmq
rpc库brpc
tcp网络库evpp
- WebRTC,非常赞的框架,做音视频通信绕不开的。
- TinyXml,小巧的C++ XML库,几个源文件,直接加入到项目中就可以用
- FreeImage,强大好用的图形库
作者:张友东
链接:https://www.zhihu.com/question/51134387/answer/387612085
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
做存储, 数据库系统方面的开发,主要用到
* grpc/libevent/libev/libasio 实现高性能网络服务器
* protobuf 数据结构序列化/反序列化,方便数据交换
* LevelDB/RocksDB 嵌入式KV数据库
* snappy/zlib/lz4 数据压缩,解压缩
* jemalloc/tcmalloc 高效内存分配器,尤其多线程场景
* jerasure Reed Solomon编解码,给存储系统实现erasure code
* murmurhash… 实现hash摘要
* crc32 数据存储或传输时的数据校验
* cJSON 解析json格式配置文件
* libBSON JSON序列化/反序列化,MongoDB使用这种格式存储数据
* boost 功能丰富的C++基础库,轻度使用,C++11/14后基本不用了。
* libRedis redis是一个数据库服务,并不是单独的库,但其代码精简,质量非常高,里面很多代码都可以拿出来直接复用,比如网络,各种数据结构的实现。
作者:iiif
链接:https://www.zhihu.com/question/51134387/answer/571858930
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
为什么 ——
A. 自己写一遍太累
B. 写得很好
C. 实用且满足我的需求
D. 好用不折腾
E. 代码有深度且可读性高,可以挖宝贝
- AC: 3D 模型解析 assimp/assimp
- ACE: 物理模拟 bulletphysics/bullet3
- AB: 渲染中间层 bkaradzic/bgfx
- CD: 3D灵感宣泄场所 cinder/Cinder // 后来发现 Houdini 更好玩
- CD: 命令行帮助既是命令行解析 https://github.com/docopt/docopt.cpp
- ACD: printf 不好用,ostream 也不好用,format 好用 fmtlib/fmt
- ABCD: 3D 数学运算 g-truc/glm
- ABCD: 拿来就能用的 UI ocornut/imgui
- D: json 结构用在 C++ 里面就像在 JS 里面一样自然 nlohmann/json
- BCD: 超高校级的 json 解析 Tencent/rapidjson
- ABCD: 用过都知道它的好的性能分析工具 jonasmr/microprofile
- CD: 又快又不折腾的 xml 解析 zeux/pugixml
- ACD: 专注寻路 recastnavigation/recastnavigation
- ACD: 什么都能放到头文件中 nothings/stb
- D: 一键生成 C/C++ 对各种其他语言的接口 swig/swig
- ACD: 最快的哈希算法 Cyan4973/xxHash
- E: 包含大量计算几何算法的 Geometric Tools
- E: 包含最经典渲染算法的 mmp/pbrt-v3
用过才敢推荐,其中 B/E 读过才敢评价
重点推荐 microprofile,不只用来分析性能好用,用来帮助理解引擎运行流程也是极其特别好用,往 Unreal 里面随便一放,它哪个线程什么时候在做什么事情、调用关系、调度状况、依赖关系一切都看得清清楚楚明明白白真真切切 —— 而且本身性能影响极小,可以远程监控,报表可以存下来慢慢研究,神器
![](https://i-blog.csdnimg.cn/blog_migrate/973982e5b7d2703ad75af78212b6875e.jpeg)
不管怎么看Unreal代码,都没这一幅图清晰
Update: 再加两个没人提的
单元测试
- BCD: 又小又快又方便的单元测试库,嗯测试很重要: onqtam/doctest
- ABCDE: 高精度浮点数运算库,Fabrice Bellard 一出手总是把很复杂的东西弄得跟玩似的,境界真的高: LibBF Library
Catch2: 著名的单元测试框架, 那么它和boost或者google的单元测试框架有什么不同呢?
就在于它首先是header only的, 其次是没有废话,直击要害! 你要测试对吧? 给你!
性能测试
Celero: 简单清晰的benchmark库, 特点就是简单易用没有废话.
文件压缩
bundle: 把几乎所有常见的压缩库封装成了一个库, 接口完全统一, 想用哪个用哪个.
就一个h和一个巨TM大的cpp文件,巨好使巨方便.
下次造轮子前先看看现有的轮子吧
值得学习的C语言开源项目
- 1. Webbench
Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。
下载链接:http://home.tiscali.cz/~cz210552/webbench.html
- 2. Tinyhttpd
tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。
下载链接:http://sourceforge.net/projects/tinyhttpd/
- 3. cJSON (C++的不推荐这个库)
cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。
cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。
项目主页:http://sourceforge.net/projects/cjson/
- 4. CMockery
cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。
主要特点:
- 免费且开源,google提供技术支持;
- 轻量级的框架,使测试更加快速简单;
- 避免使用复杂的编译器特性,对老版本的编译器来讲,兼容性好;
- 并不强制要求待测代码必须依赖C99标准,这一特性对许多嵌入式系统的开发很有用
下载链接: