【c++随笔15】c++常用第三方库
【c++随笔15】c++常用第三方库
- 一、数据库相关:
- HDFS、libpq、SQLite、RocksDB、unixODBC、Nanobdc、Ignite ;
- 二、网络通信相关:
- libcurl、libevent、libssh、mosquitto、nghttp2、libuv;
- 三、加密和安全相关:
- 1、OpenSSL
- 四、序列化和数据格式相关:
- Protobuf、json(nlohmann)、Rapidjson、pugixml、Xlnt、Yamlcpp、Libxl:
- 五、压缩compress
- Minilzo、Snappy、zlib;
- 六、其他:
- log4cxx:、LLVM、Googletest、qt、Boost、Tcmalloc、Thrift、gflags:、Libiconv C++ Library:、Libuuid、Java Native Interface(JNI)、Node.js、OpenLDAP:
原创作者:郑同学的笔记
原创地址:https://zhengjunxue.blog.csdn.net/article/details/131812432
qq技术交流群:921273910
一、数据库相关:
HDFS、libpq、SQLite、RocksDB、unixODBC、Nanobdc、Ignite ;
-
1、HDFS:
- 官网: https://hadoop.apache.org/docs/r3.3.1/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html
- 简介: HDFS (Hadoop Distributed File System) 是 Apache Hadoop 生态系统中的分布式文件系统。它被设计用于存储和处理大规模数据集,并提供高可靠性、高容错性和高吞吐量的数据访问。
- 用途: HDFS通常用于大数据处理和分析任务,如数据存储、数据备份、批处理作业和实时数据处理。
-
2、libpq:
- 官网: https://www.postgresql.org/docs/current/libpq.html
- 简介: libpq是PostgreSQL数据库的C语言客户端库。它提供了与PostgreSQL数据库进行交互的API,使开发人员可以使用C语言编写与数据库的通信代码。
- 用途: libpq可以用于开发基于PostgreSQL数据库的应用程序,包括数据库连接、执行查询、事务管理等。
-
3、SQLite:
- 官网: https://www.sqlite.org/index.html
- 简介: SQLite是一个嵌入式关系型数据库引擎。它是一个零配置、无服务器的数据库,将整个数据库存储在一个单一的文件中。SQLite具有轻量级、快速、可靠和易于使用的特点。
- 用途: SQLite广泛应用于各种应用程序和平台,包括移动应用、桌面应用、嵌入式系统和浏览器。它适用于需要本地存储和管理结构化数据的场景。
-
4、RocksDB:
- 官网: https://rocksdb.org/
- 简介: RocksDB是一个高性能的键值存储库,由Facebook开发并开源。它基于Google的LevelDB,并进行了优化和改进,提供了较高的读写性能和低延迟的数据访问。
- 用途: RocksDB适用于需要高性能和低延迟的键值存储场景,如缓存、日志存储、分布式存储系统和实时数据处理。
-
5、unixODBC:
- 官网: http://www.unixodbc.org/
- 简介: unixODBC是一个开源的ODBC (Open Database Connectivity) 驱动管理器。它提供了一个统一的接口,使应用程序能够通过ODBC与不同的数据库进行交互。
- 用途: unixODBC可用于开发需要与多个数据库进行交互的应用程序,它提供了对ODBC兼容数据库的连接和查询功能,如MySQL、Oracle、SQL Server等。
-
6、Nanobdc
- 网址:https://github.com/nanodbc/nanodbc
- 简介:Nanobdc是一个轻量级的ODBC库,用于在C++程序中与数据库进行交互。
- 用途:用于在C++程序中进行ODBC数据库访问。
-
7、Ignite C++ Library:
- 官网:https://ignite.apache.org/
- 简介:Ignite C++ Library 是 Apache Ignite 的 C++ 版本库,是一个分布式内存计算平台。Ignite 提供了高性能、可伸缩的分布式数据网格和计算功能,以支持大规模数据处理、缓存、机器学习和实时分析等应用场景。它具有灵活的 API 和丰富的功能,可以方便地在 C++ 应用程序中进行分布式计算和数据处理。
- 用途:Ignite C++ Library 主要用于构建分布式应用程序和处理大规模数据。它提供了丰富的数据结构和操作函数,如分布式缓存、分布式数据集、分布式计算等,可以帮助开发者在集群环境中进行高效的并行计算、数据共享和协作。Ignite C++ Library 还提供了与其他编程语言和工具的集成能力,如 Java、Python、JDBC、ODBC 等,方便与现有的数据处理和分析工具进行交互。
二、网络通信相关:
libcurl、libevent、libssh、mosquitto、nghttp2、libuv;
-
1、libcurl:
- 官网:https://curl.se/
- 简介:libcurl是一个用于传输数据的免费、开源、可移植的客户端URL传输库。它支持多种协议,包括HTTP、HTTPS、FTP、FTPS、SCP、SFTP、TFTP、TELNET、DICT、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。libcurl还支持HTTPS证书验证、HTTP POST、HTTP PUT、FTP上传和下载、代理、cookie、用户名+密码身份验证等功能。
- 用途:libcurl常用于开发网络应用程序,如网页抓取、文件传输、API调用等。
-
2、libevent:
- 官网:http://libevent.org/
- 简介:libevent是一个开源的事件通知库,用于网络编程。它提供了一个简单且高效的API,用于注册并触发事件,包括网络I/O、信号和定时器。libevent可以与其他网络库和框架(如libcurl和nginx)集成,使开发者能够编写高性能、可扩展的网络应用程序。
- 用途:libevent常用于开发高性能的服务器程序,如Web服务器、代理服务器、消息队列等。
-
3、libssh:
- 官网:https://www.libssh.org/
- 简介:libssh是一个开源的SSH协议客户端库,用于实现SSH连接和通信。它提供了一组简单、易用的API,用于建立SSH连接、进行身份验证、执行远程命令、传输文件等。libssh支持多种加密算法和认证方式,包括SSH1和SSH2协议。
- 用途:libssh常用于开发SSH客户端程序,如远程服务器管理工具、文件传输工具等。
-
4、mosquitto:
- 官网:https://mosquitto.org/
- 简介:mosquitto是一个开源的MQTT(Message Queuing Telemetry Transport)消息代理服务器。它实现了MQTT协议,提供了发布/订阅模式的消息传递功能。mosquitto支持TLS/SSL加密、身份验证、持久化消息、QoS(Quality of Service)保证等特性。
- 用途:mosquitto常用于开发物联网(IoT)应用程序,如传感器数据采集、远程控制、消息通知等。
-
5、nghttp2:
- 官网:https://nghttp2.org/
- 简介:nghttp2是一个开源的HTTP/2协议库,用于实现HTTP/2协议的客户端和服务器。它提供了一组高性能、可扩展的API,用于构建支持HTTP/2协议的网络应用程序。nghttp2支持多路复用、流量控制、头部压缩、服务器推送等特性。
- 用途:nghttp2常用于开发支持HTTP/2协议的网络应用程序,如Web服务器、代理服务器、CDN等。
-
6、libuv:
- 官网:https://libuv.org/
- 简介:libuv是一个开源的跨平台异步I/O库,用于实现事件驱动的网络编程。它提供了一组简单、高效的API,用于处理文件系统、网络、定时器等事件。libuv支持Windows、Linux、macOS等操作系统,并能与其他网络库和框架(如Node.js)集成。
- 用途:libuv常用于开发高性能、可扩展的网络应用程序,如Web服务器、游戏服务器、分布式系统等。
三、加密和安全相关:
1、OpenSSL
-
官网:https://www.openssl.org/
-
简介:C++ OpenSSL 是一个强大的软件库,由 C++ 编写,提供了广泛的密码学功能和安全相关工具。它支持各种密码算法、密钥管理、数字证书操作等。C++ OpenSSL 已经成为密码学领域的事实标准之一,并广泛应用于网络通信、数据加密、身份验证等安全场景。
-
用途:
安全通信:C++ OpenSSL 可以用于构建安全的客户端和服务器应用程序,通过支持 SSL/TLS 协议进行数据的加密和解密,确保数据传输的机密性和完整性。
数字证书管理:C++ OpenSSL 提供了生成、签发、验证和管理数字证书的功能。这些数字证书可以用于身份验证、数据加密和签名等场景,保护通信的安全性。
密码学功能:C++ OpenSSL 提供了丰富的密码学函数库,包括对称加密算法(如 AES、DES)、非对称加密算法(如 RSA、Diffie-Hellman)、哈希函数(如 SHA-256、MD5)等。开发者可以使用这些功能实现数据加密、解密和签名等操作。
安全增强功能:C++ OpenSSL 提供了随机数生成器、密码学伪随机数生成器、安全哈希函数等功能,可以帮助开发者提高应用程序的安全性,增加密码学强度。
四、序列化和数据格式相关:
Protobuf、json(nlohmann)、Rapidjson、pugixml、Xlnt、Yamlcpp、Libxl:
-
1、Protobuf
- 网址:https://developers.google.com/protocol-buffers
- 简介:Protobuf是Google开发的一种高效的序列化数据格式,用于在不同平台和语言之间传输和存储结构化数据。
- 用途:用于在C++程序中进行数据序列化和反序列化。
-
2、json(nlohmann):
- 官网:https://github.com/nlohmann/json
- 简介:nlohmann/json 是一个简单而强大的 C++ JSON 库,针对现代 C++ 进行了优化。它提供了一组易于使用的 API,用于处理和操作 JSON 数据。
- 用途:nlohmann/json 主要用于解析、生成和操作 JSON 数据。开发者可以使用该库轻松地解析 JSON 字符串,访问和修改 JSON 对象,以及将 C++ 数据结构转换为 JSON 格式。
-
3、Rapidjson
- 网址:https://rapidjson.org/
- 简介:Rapidjson是一个快速的JSON解析和生成库,提供了高性能的JSON处理功能。
- 用途:用于在C++程序中处理JSON数据。
-
4、pugixml:
- 官网:https://pugixml.org/
- 简介:Pugixml是一个轻量级的XML解析库,提供了高性能和易用的XML解析功能。。
- 用途:pugixml 主要用于解析和生成 XML 文档。开发者可以使用 pugixml 轻松地读取、搜索和修改 XML 数据,以及将 C++ 数据结构转换为 XML 格式。
-
5、Xlnt
- 网址:https://github.com/tfussell/xlnt
- 简介:Xlnt是一个C++ Excel库,提供了读取和写入Excel文件的功能。
- 用途:用于在C++程序中进行Excel文件的读写操作。
-
6、Yamlcpp
- 网址:https://github.com/jbeder/yaml-cpp
- 简介:Yamlcpp是一个C++ YAML库,提供了对YAML(Yet Another Markup Language)文件的解析和生成功能。
- 用途:用于在C++程序中处理YAML数据。
-
7、Libxl:
- 官网:https://www.libxl.com/
- 简介:Libxl 是一个跨平台的 C++ 库,用于读取和写入 Excel 文件。它提供了简单易用的 API,可以在 C++ 应用程序中进行 Excel 文件的操作,包括创建、修改、读取和写入 Excel 表格、单元格、格式等内容。
- 用途:Libxl 主要用于处理 Excel 文件,使开发者能够在自己的应用程序中对 Excel 数据进行读取和写入操作。通过 Libxl,你可以在 Excel 文件中创建、修改和获取数据,设置单元格格式、合并单元格、设置公式和函数等。Libxl 支持多种 Excel 文件格式,如 .xls 和 .xlsx,同时具备跨平台特性,可在 Windows、Linux、MacOS 等操作系统上使用。
五、压缩compress
Minilzo、Snappy、zlib;
- 1、Minilzo:
- 官网: https://www.oberhumer.com/opensource/lzo/
- 简介: Minilzo是一个轻量级、高性能的压缩库。它专为嵌入式系统设计,占用较小的内存空间。Minilzo提供快速的压缩和解压缩速度,适用于资源有限的应用程序。
- 用途: Minilzo适用于需要在嵌入式系统中进行数据压缩和解压缩的应用,例如网络传输、存储优化和实时数据处理。
- 2、Snappy:
- 官网: https://github.com/google/snappy
- 简介: Snappy是由谷歌开发的压缩和解压缩库。它旨在提供高速的压缩和解压缩,同时保持合理的压缩比。Snappy针对速度进行了优化,常用于需要快速数据处理的应用,如大数据分析和Web服务。
- 用途: Snappy常用于需要高速压缩和解压缩的场景,包括实时数据传输、网络传输、大数据处理和内存限制的环境。
- 3、zlib:
- 官网: https://www.zlib.net/
- 简介: zlib是一个流行的通用压缩库。它提供了良好的压缩比和相对较快的压缩和解压缩速度。zlib被广泛应用于各种应用程序和格式,包括HTTP、PNG图像文件和gzip文件格式。它是许多编程语言和操作系统的标准库。
- 用途: zlib适用于需要在各种应用程序中进行数据压缩和解压缩的场景,包括文件压缩、网络传输、数据库压缩、备份和存档等。
六、其他:
log4cxx:、LLVM、Googletest、qt、Boost、Tcmalloc、Thrift、gflags:、Libiconv C++ Library:、Libuuid、Java Native Interface(JNI)、Node.js、OpenLDAP:
-
1、log4cxx:
- 官网:https://logging.apache.org/log4cxx/
- 简介:log4cxx 是 Apache Software Foundation 开发的 C++ 版本的日志记录工具,它是 log4j 的一个移植版本。log4cxx 提供了一组灵活的 API 和配置选项,可以在应用程序中实现高性能、可配置的日志记录。
- 用途:log4cxx 可以帮助开发者在 C++ 应用程序中实现全面的日志记录功能。通过 log4cxx,开发者可以按需进行日志级别控制、日志输出格式化、动态配置等操作,从而方便地进行日志的记录和管理。log4cxx 在许多领域都有广泛的应用,例如服务器端应用、嵌入式系统、游戏开发等。
-
2、LLVM:
- 官网:https://llvm.org/
- 简介:LLVM 是一种 modul化和可重用编译器和工具链技术的集合。它最初是为了实现编译优化和代码生成而设计,并在实践中发展成为一个通用的编译器基础设施。LLVM 提供了丰富的库和工具,可用于构建编译器、静态分析工具、性能分析工具等。
- 用途:LLVM 可以用于构建各种类型的编译器和工具链。开发者可以利用 LLVM 提供的模块化架构和强大的优化能力,开发自定义编译器,对代码进行静态分析、转换和优化。此外,LLVM 也为各种编程语言提供了支持,如 C/C++、Rust、Swift 等,可以用于构建这些语言的编译器和工具。
-
3、Googletest
- 网址:https://github.com/google/googletest
- 简介:Googletest是Google的C++单元测试框架,提供了丰富的断言和测试功能。
- 用途:用于编写和执行C++的单元测试。
-
4、qt
- 官网:https://www.qt.io/
- 简介:Qt 是一个跨平台的应用程序和用户界面开发框架,用于使用 C++ 编程语言开发图形界面应用程序。它由 Qt 公司(现在是 Digia 公司)开发和维护,提供了丰富的库和工具,可以帮助开发者轻松构建高质量的应用程序。
- 用途:Qt 被广泛用于开发各种类型的应用程序,包括桌面应用程序、嵌入式应用程序、移动应用程序以及其他图形界面应用程序。Qt 提供了一套全面的工具和组件,包括图形渲染、用户界面控件、网络通信、数据库访问、多线程支持等,使开发者能够快速构建功能强大的应用程序。Qt 的特点包括其跨平台性、可扩展性、易用性和良好的性能。
-
5、Boost
- 官网:https://www.boost.org/
- 简介:Boost 是一个开源的 C++ 库集合,提供了丰富的工具和组件,扩展了 C++ 语言的功能。Boost 的目标是提高 C++ 开发效率和质量,并促进 C++ 标准库的发展。
- 用途:Boost 提供了大量的库和工具,用于解决各种常见的编程问题。它包括但不限于字符串处理、容器与算法、日期与时间、并发编程、网络通信等方面的功能。开发者可以使用 Boost 提供的组件来加速开发、提高性能、增加安全性,并增强现有 C++ 代码的功能。
-
6、Tcmalloc
- 网址:https://github.com/gperftools/gperftools
- 简介:Tcmalloc是Google的内存分配器,提供了高性能和低碎片化的内存分配功能。
- 用途:用于在C++程序中进行内存分配和管理。
-
7、Thrift
- 网址:https://thrift.apache.org/
- 简介:Thrift是一个跨语言的服务框架,用于构建可扩展的分布式系统。
- 用途:用于在C++程序中进行分布式系统开发。
-
8、gflags:
- 官网:https://gflags.github.io/gflags/
- 简介:gflags 是一个跨平台的命令行参数解析库,由 Google 开发和维护。它允许开发者定义和解析命令行参数,包括标志(flags)和非标志参数。gflags 提供了简单易用的 API,可以方便地在 C++ 应用程序中处理命令行参数。
- 用途:gflags 主要用于在 C++ 应用程序中处理命令行参数,使开发者能够轻松定义、解析和访问这些参数。通过 gflags,开发者可以设置标志参数的默认值、类型、描述等信息,并在应用程序中获取用户传入的命令行参数。gflags 还支持高级功能,如命令行帮助、自动生成配置文件等,使命令行参数处理更加便捷和灵活。gflags 在很多 C++ 项目中被广泛应用,包括 Google 的开源项目和其他许多独立开发者的应用程序。
-
9、Libiconv C++ Library:
- 官网:https://www.gnu.org/software/libiconv/
- 简介:Libiconv 是一个开源的字符编码转换库,用于在不同字符编码之间进行转换。它支持超过 150 种字符集和编码方案,包括常见的 ASCII、UTF-8、GBK、ISO-8859 等。Libiconv 提供了简单易用的 API,可以在 C++ 应用程序中进行字符编码的转换和处理。
- 用途:Libiconv 主要用于解决字符编码转换的问题。在现实应用中,经常会遇到不同编码的数据交互和处理,例如读取外部文件、网络通信、国际化等场景。Libiconv 可以帮助开发者将一种字符编码转换为另一种,保证数据在不同编码之间的正确传输和处理。通过 Libiconv,开发者可以方便地实现字符编码的转换、字符串处理、文本解析等功能,提高应用程序的兼容性和可移植性。
-
10、Libuuid
- 网址:https://sourceforge.net/projects/libuuid/
- 简介:Libuuid是一个UUID生成库,用于生成唯一标识符。
- 用途:用于在C++程序中生成和处理UUID。
如果您希望在C++中使用Java的功能,可以考虑使用Java Native Interface(JNI)或Java Native Access(JNA)来实现C++和Java之间的交互。通过JNI或JNA,可以在C++中调用Java代码,并利用JDK提供的功能和类库。
这里提供JDK的官方网站、简介和用途供您参考:
-
11、Java Native Interface(JNI)
- 官网:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
- 简介:JDK是Java开发者使用的软件开发工具包,包含了编译器、调试器、运行时环境和其他开发工具。它提供了一种完整的Java开发环境,用于创建、编译和执行Java应用程序。
- 用途:JDK用于Java应用程序的开发、编译和运行。它包含了完整的Java标准库和工具,提供了丰富的功能和API,用于开发各种类型的Java应用、Applet和Web应用等。
需要注意的是,使用JNI或JNA调用Java代码需要熟悉JNI规范和技巧,并理解C++和Java之间的交互方式和内存管理。通过这种方式,可以在C++中使用JDK提供的功能和类库,实现跨语言的功能扩展。
-
12、Node.js
- 网址:https://nodejs.org/
- 简介:Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建高性能的网络应用程序。
- 用途:用于在C++程序中嵌入和执行JavaScript代码。
-
13、OpenLDAP:
- 官网:https://www.openldap.org/
- 简介:OpenLDAP 是一个开源的实现了 Lightweight Directory Access Protocol (LDAP) 的软件套件。LDAP 是一种用于访问和维护分布式目录服务的协议,广泛应用于身份认证、用户管理和网络资源访问控制等方面。OpenLDAP 提供了服务器端和客户端库,用于搭建和访问 LDAP 目录服务。
- 用途:OpenLDAP 主要用于构建和管理 LDAP 目录服务。LDAP 目录服务是一种层次化的、分布式的数据存储系统,类似于数据库,但更注重于轻量级的、高效的读取操作。通过 OpenLDAP,可以搭建一个具有良好性能和可伸缩性的 LDAP 服务器,用于存储和管理组织机构、用户身份、权限信息等。同时,OpenLDAP 还提供了丰富的 API 和工具,用于开发和管理 LDAP 目录服务。