# 通用库

# Boost

不多介绍,没有不知道的吧,Boost 是功能相当丰富的 C++ 基础库,boost 里有很多好用的组件,都值得我们学习,造轮子时也有个方向。(话说一般 C++ 标准库好多东西也都是从 Boost 里抠出来的。)

# Folly

Facebook 的开源库,和 Boost 类似,但听说比 Boost 还牛逼。(之前研究过一个运行时检测死锁的问题,就采用了 Folly 库里面 deadlock.py 中检测图中最小环的思路。)

# Abseil

Google 的 STL,我个人更喜欢的一个开源库,主要文档比较全,官方文档关于 Abseil 介绍的也很详细。

# 通讯

# zeromq

zmq 是一个为可伸缩的分布式或并发应用程序设计的 高性能异步消息库 。它提供一个高性能消息队列,该库设计成常见的套接字风格的 API。(估计 C/C++ 开发都会用到 zmq 吧,记得以前 zmq 是 C++ 接口,貌似为了高性能又用 C 语言重写了一遍。关于 zmq 网上有太多学习资料了,大家有需要也可以关注我加我好友找我要!

# asio

asio 是一个跨平台的 C++ 网络编程框架,通过先进的 C++ 方法为开发人员提供连续异步模型。(我进行网络通信就是用的 asio,大家呢?)

# muduo

一个基于 Reactor 模式的现代 C++ 网络库,它采用非阻塞 IO 模型,基于事件驱动和回调,支持多核多线程,适合编写 Linux 服务端多线程网络应用程序。(陈硕大佬写的,值得学习,这里也极力推荐陈硕大佬的《Linux 多线程服务端编程》书籍,文中很多篇幅都讲述了如何使用现代 C++,及时不进行网络开发也推荐学习一下这本书,我当年看了两遍,收获颇多!)

# protobuf

Google 出品,protobuf 一个具有高效的协议数据交换格式工具库 (类似 Json),但相比于 Json,Protobuf 有更高的转化效率,时间效率和空间效率都是 JSON 的 3-5 倍。(现在的 RPC 基本都是用 protobuf 作为通讯数据格式。)

# poco

一个开源的 C++ 类库的集合,它主要提供简单的、快速的网络和可移植应用程序的 C++ 开发,这个类库和 C++ 标准库可以很好的集成并填补 C++ 标准库的功能空缺。POCO 库的模块化、高效的设计及实现使得特别适合嵌入式开发。

# libevent

一个用 C 语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动,高性能,轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台;支持多种 I/O 多路复用技术:epoll、poll、select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级等。

# 音视频

# FFmpeg

音视频届的 yyds,音视频开发有谁能绕过 ffmpeg?ffmpeg 的功能相当强大,音视频采集、音视频格式转换、滤镜、水印、音视频编解码、推送到流媒体服务器等等,太多了,对视频的绝大多数处理都可以使用 ffmpeg,可以说无所不能。

# 图像处理

# OpenCV

OpenCV 用 C++ 语言编写,它具有 C++,Python,Java 和 MATLAB 接口,并支持 Windows,Linux,Android 和 Mac OS 多种平台, 如今也提供对于 C#、Ch、Ruby,GO 的支持。是计算机视觉里非常举足轻重的库,主要可用于物体检测、人脸检测、图像处理等。(我更多主要用它来读图片文件,进行格式转码和预览等,是不是有点大材小用了)

# 图形

# OpenGL

用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API),图型开发者貌似都离不开 OpenGL,与纹理有关的操作基本都会用到 OpenGL,常用于 CAD、虚拟现实、科学可视化程序和电子游戏开发。(我平时做音视频开发就需要经常使用 OpenGL,搭配下面介绍的 glm 使用,真香。)

# Vulkan

下一代的 OpenGL,可解决 OpenGL 很多框架层面的缺陷,更高性能,可能我们以后都会从 OpenGL 迁移到 Vulkan 吧,但升级永远没有那么容易,成本太高,至少它现在还没那么普及。

# Ogre

一个三维 (3D) 图形渲染引擎。它是面向对象的,并且高效,抽象化了不同的 API 和平台,这样可以以场景为对象来使用物体,支持多种场景。它已经成功地被应用于诸多三维仿真领域,包括网络游戏和三维仿真项目。(我们平时见到的各种特效,比如在人脑袋上贴个大恐龙,贴个 B 站小电视,可能底层就是用到了 Ogre。)

# bgfx

一个跨平台、“可打造个性引擎 / 框架” 风格的渲染库,类似于 Ogre。(我们部门渲染组初期技术选型时就评估了一下 Ogre 和 bgfx,两者都能满足需求,但最终还是选择了 Ogre,具体为啥我也忘了...)

# 线性代数

# Eigen

一个线性算术的 C++ 模板库,功能强大、快速、优雅以及支持多平台。想找关于数学运算的三方库,首选 Eigen 就对了!

# GLM

由于 C/C++ 标准库中没有几何数学库,这样造成在开发一个三维系统之初往往都需要自行实现一个实用的几何数学库,这样太费时费力了。GLM 的出现可以很好的解决这个问题,而且 GLM 不需要编译成任何库,只需要依赖头文件即可使用(OpenGL 搭配 GLM 使用,很爽)。

# JSON

rapidjson,nlohmann/json,cJSON。C++ 语言就在 rapidjson 和 nlohmann/json 中选一个,C 语言就用 cJSON。

# 服务端引擎

# workflow

搜狗公司 C++ 服务器引擎,支撑搜狗几乎所有后端 C++ 在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理超百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数 C++ 后端开发需求。(之前我还特意写了一篇文章介绍过)

# log

# spdlog

目前最火的 C++ log 库,只需要头文件即可,兼容 C++11,相当方便,现在有人问有什么好的 log 库推荐,我都是无脑推荐 spdlog。

特点:

  • 非常快
  • 无需依赖第三方库
  • 支持跨平台 - Linux / Windows on 32/64 bits
  • 支持多线程
  • 可对日志文件进行循环输出
  • 可每日生成日志文件
  • 支持控制台日志输出
  • 可选的异步日志
  • 支持日志输出级别
  • 可自定义日志格式

# glog

Google Glog 是一个 C++ 语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种辅助宏。我以前参与的项目就有使用过 glog,关于 glog 我还做过源码分析,这里看吧!https://github.com/fightingwangzq/cpp-learning

# fmtlib/fmt

formatting 库,相当不错,如果觉得下面的代码非常繁琐,可考虑使用 fmt。

cout << "(" << a << ")(" << b << ")(" << c << ")" << endl;

# 原文链接

  • 你工作中最推荐的 C/C++ 程序库有哪些,为什么?
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

宇凌喵 微信支付

微信支付

宇凌喵 支付宝

支付宝