目录
处理高并发的库
日志
PRC
嵌入式文件系统
代码质量
深度学习库
HTTP 网络库
单元测试
性能测试
文件压缩
下次造轮子前先看看现有的轮子吧
值得学习的C语言开源项目
- 1. Webbench
- 2. Tinyhttpd
- 3. cJSON (C++的不推荐这个库)
- 4. CMockery
- 5. Libev
- 6. Memcached
- 7. Lua
- 8. SQLite
- 9. UNIX v6
- 10. NETBSD
C++ 资源大全
标准库
框架
人工智能
异步事件循环
音频
生态学
压缩
并发性
容器
密码学
数据库
调试
游戏引擎
图形用户界面
图形
图像处理
国际化
Jason
日志
机器学习
数学
多媒体
网络
物理学
机器人学
科学计算
脚本
序列化
视频
虚拟机
Web应用框架
XML
多项混杂
软件
编译器
在线编译器
调试器
集成开发环境(IDE)
构建系统
静态代码分析
能不用cpp就不用要用了
处理高并发的库
libevent:
事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台
(
libevent
、libev、
libuv)
日志
glog:
google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活,而且功能也比较完善。
spdlog
: logger库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是header only的.
gabime/spdlog
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 库。
-
代码质量
静态代码检查工具 cppcheck
深度学习库
caffe
HTTP 网络库
cpp-httplib
,
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,强大好用的图形库
-
-
作者:张友东
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
做存储, 数据库系统方面的开发,主要用到
* 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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
为什么 ——
A. 自己写一遍太累
B. 写得很好
C. 实用且满足我的需求
D. 好用不折腾
E. 代码有深度且可读性高,可以挖宝贝
用过才敢推荐,其中 B/E 读过才敢评价
重点推荐 microprofile,不只用来分析性能好用,用来帮助理解引擎运行流程也是极其特别好用,往 Unreal 里面随便一放,它哪个线程什么时候在做什么事情、调用关系、调度状况、依赖关系一切都看得清清楚楚明明白白真真切切 —— 而且本身性能影响极小,可以远程监控,报表可以存下来慢慢研究,神器
不管怎么看Unreal代码,都没这一幅图清晰
Update: 再加两个没人提的
单元测试
Catch2
: 著名的单元测试框架, 那么它和boost或者google的单元测试框架有什么不同呢?
就在于它首先是header only的, 其次是没有废话,直击要害! 你要测试对吧? 给你!
catchorg/Catch2
性能测试
Celero
: 简单清晰的benchmark库, 特点就是简单易用没有废话.
DigitalInBlue/Celero
文件压缩
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标准,这一特性对许多嵌入式系统的开发很有用
-
下载链接:
http://code.google.com/p/cmockery/downloads/list
- 5. Libev
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。
下载链接:
http://software.schmorp.de/pkg/libev.html
- 6. Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。
下载地址:
http://memcached.org/
- 7. Lua
Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。
让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。
下载地址:
http://www.lua.org/
- 8. SQLite
SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。
下载地址:http://www.sqlite.org/ 。
- 9. UNIX v6
UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?
另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。
下载地址:
http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6
- 10. NETBSD
NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
下载地址:
http://www.netbsd.org/
C++ 资源大全
关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。
标准库
C++标准库,包括了STL容器,算法和函数等。
框架
C++通用框架和库
异步事件循环
音频
音频,声音,音乐,数字化音乐库
生态学
生物信息,基因组学和生物技术
压缩
压缩和归档库
-
bzip2
:一个完全免费,免费专利和高质量的数据压缩
-
doboz
:能够快速解压缩的压缩库
-
PhysicsFS
:对各种归档提供抽象访问的库,主要用于视频游戏,设计灵感部分来自于Quake3的文件子系统。
-
KArchive
:用于创建,读写和操作文件档案(例如zip和 tar)的库,它通过QIODevice的一系列子类,使用gzip格式,提供了透明的压缩和解压缩的数据。
-
LZ4
:非常快速的压缩算法
-
LZHAM
:无损压缩数据库,压缩比率跟LZMA接近,但是解压缩速度却要快得多。
-
LZMA
:7z格式默认和通用的压缩方法。
-
LZMAT
:及其快速的实时无损数据压缩库
-
miniz
:单一的C源文件,紧缩/膨胀压缩库,使用zlib兼容API,ZIP归档读写,PNG写方式。
-
Minizip
:Zlib最新bug修复,支持PKWARE磁盘跨越,AES加密和IO缓冲。
-
Snappy
:快速压缩和解压缩
-
ZLib
:非常紧凑的数据流压缩库
-
ZZIPlib
:提供ZIP归档的读权限。
-
并发性
并发执行和多线程
数据库
数据库,SQL服务器,ODBC驱动程序和工具
调试
调试库, 内存和资源泄露检测,单元测试
图形用户界面
-
CEGUI
: 很灵活的跨平台GUI库
-
FLTK
:快速,轻量级的跨平台的C++GUI工具包。
-
GTK+
: 用于创建图形用户界面的跨平台工具包
-
gtkmm
:用于受欢迎的GUI库GTK+的官方C++接口。
-
imgui
:拥有最小依赖关系的立即模式图形用户界面
-
libRocket
:
libRocket
是一个C++ HTML/CSS 游戏接口中间件
-
MyGUI
:快速,灵活,简单的GUI
-
Ncurses
:终端用户界面
-
QCustomPlot
:没有更多依赖关系的Qt绘图控件
-
Qwt
:用户与技术应用的Qt 控件
-
QwtPlot3D
:功能丰富的基于Qt/OpenGL的C++编程库,本质上提供了一群3D控件
-
OtterUI
:
OtterUI
是用于嵌入式系统和互动娱乐软件的用户界面开发解决方案
-
PDCurses
包含源代码和预编译库的公共图形函数库
-
wxWidgets
C++库,允许开发人员使用一个代码库可以为widows, Mac OS X,Linux和其他平台创建应用程序
-
bgfx
:跨平台的渲染库
-
Cairo
:支持多种输出设备的2D图形库
-
Horde3D
一个小型的3D渲染和动画引擎
-
magnum
C++11和OpenGL 2D/3D 图形引擎
-
Ogre 3D
用C++编写的一个面向场景,实时,灵活的3D渲染引擎(并非游戏引擎)
-
OpenSceneGraph
具有高性能的开源3D图形工具包
-
Panda3D
用于3D渲染和游戏开发的框架,用Python和C++编写。
-
Skia
用于绘制文字,图形和图像的完整的2D图形库
-
urho3d
跨平台的渲染和游戏引擎。
-
Boost.GIL
:通用图像库
-
CImg
:用于图像处理的小型开源C++工具包
-
CxImage
:用于加载,保存,显示和转换的图像处理和转换库,可以处理的图片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。
-
FreeImage
:开源库,支持现在多媒体应用所需的通用图片格式和其他格式。
-
GDCM
:Grassroots DICOM 库
-
ITK
:跨平台的开源图像分析系统
-
Magick++
:ImageMagick程序的C++接口
-
MagickWnd
:ImageMagick程序的C++接口
-
OpenCV
: 开源计算机视觉类库
-
tesseract-ocr
:OCR引擎
-
VIGRA
:用于图像分析通用C++计算机视觉库
-
VTK
:用于3D计算机图形学,图像处理和可视化的开源免费软件系统。
-
gettext
:GNU `gettext’
-
IBM ICU
:提供Unicode 和全球化支持的C、C++ 和Java库
-
libiconv
:用于不同字符编码之间的编码转换库
-
Jason
物理学
动力学仿真引擎
Web应用框架
-
Civetweb
:提供易于使用,强大的,C/C++嵌入式Web服务器,带有可选的CGI,SSL和Lua支持。
-
CppCMS
:免费高性能的Web开发框架(不是 CMS).
-
Crow
:一个C++微型web框架(灵感来自于Python Flask)
-
Kore
:使用C语言开发的用于web应用程序的超快速和灵活的web服务器/框架。
-
libOnion
:轻量级的库,帮助你使用C编程语言创建web服务器。
-
QDjango
:使用C++编写的,基于Qt库的web框架,试图效仿Django API,因此得此名。
-
Wt
:开发Web应用的C++库。
-
XML
XML就是个垃圾,xml的解析很烦人,对于计算机它也是个灾难。这种糟糕的东西完全没有存在的理由了。-Linus Torvalds
多项混杂
一些有用的库或者工具,但是不适合上面的分类,或者还没有分类。
软件
用于创建开发环境的软件
编译器
C/C++编译器列表
在线编译器
在线C/C++编译器列表
调试器
C/C++调试器列表
集成开发环境(IDE)
C/C++集成开发环境列表
静态代码分析
提高质量,减少瑕疵的代码分析工具列表
感谢平凡之路和fffaraz 的整理,转载请注明出处。
jquery 接收页面参数 jquery获取链接参数
比如有一个链接:https://www.baidu.com/s?cl=3&tn=baidutop10&fr=top1000,先定义方法://获取url中的参数
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标