转: 工作中用的C++库

    1. 转:https://www.mhftz.com/archives/42.html

      个人学习C/C++的开源代码:

      0.STL

      1.osmium 

      2.leveldb

      3.glog

      4.redis

      个人使用的开源代码:

      1.rapidjson

      2.protobuf

       

      每个人每个时期都有所需要的lib,并且不同吧。

      个人觉得3d方面HDK(houdini 3d, houdini engine)库是和其他库完全不同的:
      HDK和其他库的区别就好像,其他库是初等数学,HDK是微积分。
      这个库牛逼到:
      比如你做一个舰船模型,只要修改一个参数(不是两个参数),这个舰船就能自动,智能的从渔船变成军舰,乃至变成宇宙飞船。每个模型都有无数级别,无数种变换。

      并且HDK在qt上可以和qt的python交互,使用很方便。

    2. 陈宇飞说道:

      还是要推荐一下脸书的folly,毕竟广告还是要打的 GitHub – facebook/folly: An open-source C++ library developed and used at Facebook.
      folly就是一个杂货铺,里面很多boost没有的东西。我最常用到的就是folly::to,虽然新标准里面都有这种数字/字符串的转换了,但是老版本编译器的话还是folly::to 方便
      folly还有各种各样的数据结构,比如MPMCQueue是一个多Consumer多Producer的queue,用起来非常方便,速度也快。AtomicList,AtomicUnorderedMap,AtomicStruct都是一个在高并发的情况下需要用到的数据结构
      如果你对里面的内部构造感兴趣,我写过一个关于folly里面各种数据结构的问,你可以看看你见过哪些令你瞠目结舌的C/C++代码技巧? – 陈宇飞的回答

    3. 王煦说道:

      泛用库Boost,界面库Qt,通信库ZeroMQ,视觉库OpenCV,并发库tbb,深度学习Caffe,序列化Protobuf ,加上一些cppformat之类的小库

    4. 慧航说道:

      写几个我最经常用的吧:

      1、科学家算GSL:GNU Scientific Library

      基本上能满足用C做科学计算的要求:

      The complete range of subject areas covered by the library includes,

      Complex NumbersRoots of PolynomialsSpecial FunctionsVectors and MatricesPermutationsSortingBLAS SupportLinear AlgebraEigensystemsFast Fourier TransformsQuadratureRandom NumbersQuasi-Random SequencesRandom DistributionsStatisticsHistogramsN-TuplesMonte Carlo IntegrationSimulated AnnealingDifferential EquationsInterpolationNumerical DifferentiationChebyshev ApproximationSeries AccelerationDiscrete Hankel TransformsRoot-FindingMinimizationLeast-Squares FittingPhysical ConstantsIEEE Floating-PointDiscrete Wavelet TransformsBasis splinesRunning StatisticsSparse Matrices and Linear Algebra

      从最优化 到 排序 到 线性代数、稀疏矩阵,功能是很全的。

      当然,有条件的可以用Intel的MKL:

      2、最优化工具包,NLopt:NLopt Reference

      一般简单问题GSL的最优化包也够用了,不过如果碰到有约束之类的问题,NLopt包是个不错的选择。

      3、OpenMP、OpenMPI

      不多解释了,两种不同类型的并行计算模型。

    5. 赵科进说道:

      这就比较多了,有一些一直就很有名思想先进我也用过,比如Qt

      还有一些比较老了,说出来有些倚老卖老,比如ATL,一个用于开发COM的模板库,还有MFC,WTL

      另外还有一部分在自己的项目某些模块中使用了,一直如雷贯耳但是没太多的直接用到,比如boost,这玩意影响了C++的发展,你说它牛不牛?

      还有opencv,华夏大地多少妹子爱它爱的不得了,虽然她们自己可能未必知道那些美颜,脸部识别多少都跟这玩意有些关系。

    6. 诸葛不亮说道:

      越来越nb的STL,在尝试从Qt迁移中

      直接影响cpp发展的,除了GUI等偏业务的,其他几乎啥都干的库,boost,目前在入门中

      nb程度直追boost的folly,不过暂时没空学

      Qt,同样是万能类库,同时还是强大的GUI库

      大数字运算库GMP

      计算机视觉库OpenCV,大学时玩过,不是一般的nb

    7. 知乎用户说道:

      http客户端curl

      http服务器 crow

      gzip压缩zlib

      json序列化jsoncpp

      二进制序列化protobuf

      嵌入式数据库sqlite

      日志库glog

      参数解析库gflags

      消息队列zmq

      rpc库brpc

      tcp网络库evpp

      3d仿真osg

      图形图像opencv

      stl,boost,qt就不用说了。

      不是我说,大家老老实实做调包侠,赚钱才是王道。

      windows下开发,强烈推荐vcpkg,了却找第三方库,编译第三方库的烦恼。

    8. Chen Moore说道:

      愚以为STL已经应该算做C++的一部分了……

      自己最常用的几个:
      curl
      zlib
      sqlite
      opencv

    9. foruok说道:
      1. 应用开发框架Qt,我的最爱,我还写了两本相关的书,《Qt Quick核心编程》和《Qt on Android核心编程》。优雅的信号与槽,强大的界面类库,跨平台。
      2. CEF(Chromium Embedded Framework),使用网页做富客户端的绝佳选择,基于Chromium,可以方便嵌入到你的应用中。类似的还有 Electron 。
      3. WebRTC,非常赞的框架,做音视频通信绕不开的。
      4. TinyXml,小巧的C++ XML库,几个源文件,直接加入到项目中就可以用
      5. Protobuf,Google的,网络通信,非常赞,方便序列化和结构化,流量又小
      6. FreeImage,强大好用的图形库
      7. Libevent,轻量级的基于事件驱动的高性能的开源网络库
      8. ffmpeg,多媒体开发类库的无冕之王
    10. sunoru说道:

      说几个跟化学相关的:

      1. Open Babel,C++ 开发的,GPLv2。自由在几十种分子结构的文件格式之间转换,还带有简单的优化、绘图功能。虽然我觉得最好用的是它的 Python binding。

      2. Gromacs,当前最流行的分子动力学模拟库,高性能,针对几乎所有平台都有优化。原本是 C 语言开发的,现在在向 C++ 迁移,已经完成大半了。是最好用的吗?按照我同事的话来讲就是“首先你要有个对手才可以比好不好用呀”。这个和 OpenBabel 一样,虽然本身也是一个软件,但作为 C++ 的库链接到你自己写的程序里会相当相当好用。对了,它还是 LGPL 开源的。

      3. BALL Project,主体是 C++ 开发的,有少量 C 代码。它是一个主要为分子生物学和分子建模而生的工具库。有一个叫做 View 的扩展用来可视化结构文件很不错。提供类似功能的库其实有很多,比如 OpenMM 以及上面提到的那两个,不过我觉得 BALL 还是最全面健壮的,还支持扩展。最关键的,它也是 LGPL 协议开源的。

    11. Jaco说道:

      RapidJSON: 首页

      这个json处理工具性能优良。这个是已经在工作中使用过的。

       

      在推荐一个工作中没有使用,但是非常不错的开源项目,值得你学习: Seastar

    12. laike9m说道:
    13. 知乎用户说道:

      来几个不常见但是很变态的库吧:

       

      bundle: 把几乎所有常见的压缩库封装成了一个库, 接口完全统一, 想用哪个用哪个.

      就一个h和一个巨TM大的cpp文件,巨好使巨方便.

      r-lyeh-archived/bundle

       

      Celero: 简单清晰的benchmark库, 特点就是简单易用没有废话.

      DigitalInBlue/Celero

       

      getopt: 解析命令行输入参数的库, 好使! 没废话! 就俩文件.

      r-lyeh-archived/getopt

       

      stb_image: 常见图片格式加载库, 就一个巨大无比的头文件

      stb_truetype: 常见字体加载库, 就一个巨大无比的头文件, 觉得freetype大的可以用它.

      都在这: nothings/stb

       

      better-enums: 编译期实现的enum扩展功能,包括enum和字符串互转等等. 感觉比较重量级, 我一般是不用的, 但有时候没它还真是别扭, 尤其是需要把一个enum序列化的时候.

      aantron/better-enums

       

      Catch2: 著名的单元测试框架, 那么它和boost或者google的单元测试框架有什么不同呢?

      就在于它首先是header only的, 其次是没有废话,直击要害! 你要测试对吧? 给你!

      catchorg/Catch2

       

      uchardet: 实现猜字符串编码的功能, 例如输入一个不知道编码的文本文件, 它可以帮你”猜” 这个文件的编码是什么. 和python里的uchardet功能基本一样.

      BYVoid/uchardet

       

      win-iconv: iconv库是一个字符集编码转换的库, 在linux和mac下均是原生字符转换库. 但windows上并不是自带的. 那么就会导致在windows上编译iconv有点浪费. 因为windows显然已经自带字符集转换的功能了. 那么这个库的作用就是用windows api来实现和iconv库一模一样的接口. 这样编译出来比较小. 从此字符转换不是梦.

      win-iconv/win-iconv

       

      freetype-gl: open gl 上实现的freetype. 不过我个人没用过… 不知道好不好用. 但当你需要在opengl上下文中渲染字体的时候, 你可能用得着它.

      rougier/freetype-gl

       

      nanovg: 基于openGL/DX/metal的2d绘图库. 绘图效率高, 接口清晰. 主版本是基于openGL的, 但有DX,metal等分支. 前端接口还有python和lua的. 个人感觉不错.

      memononen/nanovg

       

      imgui: 大名鼎鼎的imgui, 你可能会问在有一堆GUI框架的情况下为什么我们需要imgui? 因为它是immediate mode的. 个人认为是几个immediate mode的GUI框架里最好的. 详细见它的页面介绍.

      r-lyeh-archived/imgui

       

      spdlog: logger库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是header only的.

      gabime/spdlog

       

      ffts: 很好使的FFT库, 和fftw的不同在于用着是真方便! 而且难能可贵在于速度居然真不比fftw慢.

      linkotec/ffts

       

      fmt: formatting库, 又小又好使! 太好使了!

      fmtlib/fmt

       

      最后是恐怖的Amalgamate.

      vinniefalco/Amalgamate

      它是干嘛的呢? 它是专门用来把其他库”封装成”一个cpp和一个h文件的工具. 比如说freetype里有几十个h几十个cpp, 用起来觉得麻烦的话, 就写个配置文件然后用它跑一下, 立即就可以把freetype的这些cpp和h文件变成仅仅两个巨大无比的cpp和h文件. 再重复一遍, 巨大无比!! 这便是传说中的unity build…. 目前github上已经有很多的人开始用它来封装一些常见的库了.

      那么这么做好不好呢, 我也不知道. 前文中提到的bundle库就是用它把N多库合并到一个cpp里的.

      这个工具的作者vinniefalco还写了beast库, 目前已收录进了boost里.

       

      freetypeAmalgam: 利用上面的工具把整个freetype封装成了一个h和一个cpp, 想用freetype又懒得编译和配置的人就把这两个文件往项目里一拖, 就可以用freetype了.

      vinniefalco/FreeTypeAmalgam

    14. 张友东说道:

      做存储, 数据库系统方面的开发,主要用到

      * 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是一个数据库服务,并不是单独的库,但其代码精简,质量非常高,里面很多代码都可以拿出来直接复用,比如网络,各种数据结构的实现。

    15. Irons Du说道:

      我推荐一个貌似没被提及的:

      用于解析命令行参数,个人觉得比gflags高级多了。

    16. Xi Yang说道:

      我来布道GNU的那一套吧。

      Glib:C基础库,提供了容器、原子操作、线程、抛异常、字符串等基础设施。

      GObject:在C里面实现比C++更彻底的对象系统。Gtk3的GObject有很彻底的introspection能力,比如运行时自动生成脚本语言绑定。代价是写类型需要一堆恶心的宏。

      Cairo:2D绘图库,功能全面,支持多种绘图表面,包括内存位图、矢量文件(PDF、PostScript、SVG)、窗口表面。主要问题是在Windows上的屏幕绘图是用GDI实现的,神特么慢。

      Gtk:GUI开发架构。它几乎所有的玩意都可以绑事件,事件化的程度比Qt Widgets还要彻底。Gtk Builder使用布局描述XML在运行时构建GUI,并且自动绑定回调函数(代价是必须暴露回调函数到符号表)。基于GObject既是它的好处(彻底的事件化),也是它的缺点(写个新Gtk类型需要一堆恶心的宏)。

    17. zpan说道:

      GLib

      FFmpeg

      fftw

      boost

      Catch2

      libuv

      http_parser

      OpenSSL

      libsodium

      MsgPack

      cblas

      SQLite

      Redis

      cJSON

    18. 知乎用户说道:

      说几个不是库的

      OpenAFS,著名的分布式文件系统。

      Memcached,没人不知道吧

      C++ B-tree

       hashmap

      http://thrust.github.io 这是个并行库

      opencl不用我说了吧。

      openmp也不用说吧

      leveldb rocksdb

      memtrack 一看名字就知道干啥吧。

      cppcheck静态检查的

      addressantizer valgrind 查内存泄漏的

      ace是垃圾,我不用它。

      v8 js引擎

      crow cpp版的flask,web框架

      peloton数据库,Self-Driving DB

posted @ 2019-12-17 16:14  water_bear  阅读(344)  评论(0编辑  收藏  举报