• 转: 工作中用的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

  • 相关阅读:
    解放双手,数据库智能调参CDBTune等你来测
    选择:成本和安全?我都要!
    腾讯云Redis全面升级,性能提升400%,可用性高达5个9
    腾讯云数据库TDSQL大咖论道 | 基础软件的过去、现在、未来
    Nginx配置http强制跳转https
    golang从实践到放弃 牧羊人
    基于 libclang 编译 C 文件的坑( error: unknown type name 'uint8_t' )
    在一个数组里过滤掉另一个数组
    接口自动化测试小结
    批处理(BAT)读取目录下所有目录并写入变量中
  • 原文地址:https://www.cnblogs.com/water-bear/p/12055139.html
Copyright © 2020-2023  润新知