当前位置: 首页 > news >正文

Ubuntu22.04中使用cmake安装abseil-cpp库

Ubuntu22.04中使用cmake安装abseil-cpp库

关于Abseil库

Abseil 由 Google 的基础 C ++ 和 Python 代码库组成,包括一些正支撑着如 gRPC、Protobuf 和 TensorFlow 等开源项目并一起 “成长” 的库。目前已开源 C++ 部分,Python 部分将在后续开放。

Abseil 是一个开源的 C++ 库代码集合,旨在增强 C++ 标准库的功能。Abseil 库代码源自 Google 自己的 C++ 代码库,经过了广泛的测试和生产环境使用,与我们日常编程工作中所依赖的代码完全相同。

在某些情况下,Abseil 提供了 C++ 标准中缺失的部分;在其他情况下,Abseil 针对我们在 Google 代码库中使用过程中发现的特殊需求,提供了标准的替代方案。我们会在提供给您的库代码中明确标注这些情况。

Abseil 并非旨在与标准库竞争;我们只是发现其中许多实用程序在我们的代码库中发挥了作用,现在我们希望将这些资源提供给整个 C++ 社区。

Abseil的C++部分github代码库:https://github.com/abseil/abseil-cpp

快速入门

如果您只是想开始使用,请务必至少浏览一下 Abseil 快速入门。快速入门包含有关设置开发环境、下载 Abseil 代码、运行测试以及如何运行简单二进制文件的信息。

构建 Abseil

Bazel 和 CMake 是 Abseil 的官方构建系统。有关使用 Bazel 构建系统构建 Abseil 的更多信息,请参阅快速入门。如果您需要 CMake 支持,请查看 CMake 构建说明和 CMake 快速入门。

代码概览

Abseil包含以下c++库组件:

  • base
    基础库包含初始代码和其他Abseil代码所依赖的代码。 base中的代码可能不依赖于任何其他代码(c++标准库除外)。

  • algorithm
    算法库包含对c++ 库和基于容器的算法的补充。

  • cleanup
    清理库包含类似控制流构造的类型absl:: cleanup,用于在范围退出时执行回调。

  • container
    容器库包含额外的stl风格的容器,包括Abseil的无序“Swiss table”容器。

  • debugging
    调试库包含用于启用泄漏检查、堆栈跟踪和符号化的实用代码。

  • flags
    flags库包含处理Abseil构建的库和二进制程序的命令行标志的代码。

  • hash
    哈希库包含了Abseil中哈希类型的哈希框架和默认哈希函数实现。

  • iterator
    迭代器库包含用于在基于范围的for循环中增加范围的实用程序。

  • log
    日志库包含log和CHECK宏以及将日志消息写到磁盘、stderr或用户可扩展的目的地的工具。

  • memory
    内存库包含对c++的库进行扩充的内存管理工具。

  • meta
    元库包含在c++ <type_traits>库的c++ 14和c++ 17版本中可用的类型检查的兼容版本。

  • numeric
    数值库包含128位整数类型以及c++ 20的逐位数学函数的实现。

  • profiling
    分析库包含用于分析c++实体的工具代码。 它目前是其他Abseil库的私有依赖项。

  • random
    随机库包含用于生成伪随机值的函数。

  • status
    状态库包含错误处理的抽象,特别是absl:: status和absl::StatusOr。

  • strings
    字符串库包含各种字符的常规用法和实用工具,包括c++ 17 std::string_view类型的c++ 14兼容版本。

  • synchronization
    同步库包含并发原语(Abseil的absl::Mutex类是std:: Mutex的替代方案)和各种同步抽象。

  • time
    时间库包含用于计算绝对时间点、时间持续时间以及在时区内格式化和解析时间的抽象。

  • types
    类型库包含非容器实用程序类型,比如c++ 17 std::可选类型的c++ 14兼容版本。

  • utility
    工具库包含实用工具和辅助程序代码。

发布

Abseil 建议用户“实时更新”(尽可能频繁地从主分支更新到最新提交)。然而,我们意识到这种理念并非适用于所有项目,因此我们也提供长期支持版本,用于将严重错误修复反向移植到这些版本中。更多详情,请参阅我们的发布管理文档。

许可证

Abseil C++ 库遵循 Apache 许可证条款。更多信息请参阅许可证。

链接

更多关于 Abseil 的信息:

  • 查阅我们的 Abseil 简介
  • 阅读为什么采用 Abseil了解我们的设计理念。
  • 仔细阅读我们的 Abseil 兼容性保证,了解我们对您的承诺以及我们对您的期望。

Ubuntu22.04中使用cmake安装abseil-cpp库

我们可以使用bazel或者cmake这两个构建工具编译absel-cpp,具体取决于我们项目中采用哪种构建工具,是bazel还是cmake。
由于我习惯了使用cmake,所以实际项目中我常采用cmake作为编译工具。

  • C++ Quickstart With CMake
  • C++ Quickstart With Bazel
    参考 C++ Quickstart With CMake可以顺利在Ubuntu22.04中编译安装abseil-cpp库,默认生成的是abseil的.a静态库,如下图所示:
    abseil静态库
    其对应的编译命令为:
$ cd abseil-cpp
$ mkdir build && cd build
$ cmake -DABSL_BUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=17 ..
...
-- Configuring done
-- Generating done
-- Build files have been written to: ${PWD}

通过查看对应的https://github.com/abseil/abseil-cpp/blob/master/CMakeLists.txt文件,搜索shared关键字,可以看出默认编译的是静态库,如下图所示:
CMakeLists.txt
所以为了生成abseil-cpp的动态库就很明确了,直接在原有的编译命令cmake -DABSL_BUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=17 ..基础上将BUILD_SHARED_LIBS标记设置为ON即可,对应的编译动态库的命令为:

cmake -DBUILD_SHARED_LIBS=ON -DABSL_BUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=ON -DCMAKE_CXX_STANDARD=17 ..

编译动态库
2.编译动态库
3.编译动态库
然后在执行sudo make install将库安装到默认安装目录/usr/local下,当然也可以使用CMAKE_INSTALL_PREFIX参数指定自己的安装目录。
安装.so动态库到/usr/local目录
1.abseil库的so
2.abseil库的so
这样我们就可以使用abseil库进行C++项目开发了,Google鼎鼎大名的protobuf库最新版本32.0也使用到了Abseil 库。

abseil-hello 示例程序

关于abseil-cpp库的使用示例,可以参见https://github.com/abseil/abseil-hello示例程序,
要了解如何将 Abseil 与 Bazel 构建系统结合使用,请参阅 bazel-hello。
bazel-hello

要了解如何将 Abseil 与 CMake 元构建系统结合使用,请参阅 cmake-hello。
cmake-hello

参考资料

  • https://abseil.io/
  • https://github.com/abseil/abseil-cpp
  • https://github.com/abseil/abseil-cpp/blob/master/CMakeLists.txt
  • https://abseil.io/docs/cpp/quickstart
  • https://abseil.io/docs/cpp/quickstart-cmake
  • https://github.com/abseil/abseil-hello
  • http://www.bazel.io/
  • https://cmake.org/
  • https://github.com/protocolbuffers/protobuf
  • Protocol Buffers - Google’s data interchange format

文章转载自:

http://8Nfz4SG1.wkkqw.cn
http://PtoLKCti.wkkqw.cn
http://mSUzYjqE.wkkqw.cn
http://HjNzMwO5.wkkqw.cn
http://twhnhiwq.wkkqw.cn
http://mQCN3Ckz.wkkqw.cn
http://MATxqHxi.wkkqw.cn
http://7r3a51Pq.wkkqw.cn
http://Mcq1WKvf.wkkqw.cn
http://VjdrQ77V.wkkqw.cn
http://Q4a9oMZw.wkkqw.cn
http://Uzxm0jlP.wkkqw.cn
http://G7FViXEI.wkkqw.cn
http://LYos0umr.wkkqw.cn
http://aKWdxFp6.wkkqw.cn
http://ZNiJIP6V.wkkqw.cn
http://cmczJbEG.wkkqw.cn
http://5f43HE9K.wkkqw.cn
http://m7rLQZ08.wkkqw.cn
http://fabWzIXY.wkkqw.cn
http://o5jVurUf.wkkqw.cn
http://8P3n0qMe.wkkqw.cn
http://a8vYLqIy.wkkqw.cn
http://bJJDvYk8.wkkqw.cn
http://QROqwcQS.wkkqw.cn
http://jegnjlrB.wkkqw.cn
http://NtmGdDR8.wkkqw.cn
http://842o0EYo.wkkqw.cn
http://YxsPq9Xg.wkkqw.cn
http://yPI9xC2I.wkkqw.cn
http://www.dtcms.com/a/365434.html

相关文章:

  • oracle 从一张表更新到另外一张表的方法(MERGE)
  • java面试:可以讲解一下mysql的索引吗
  • 部署MYSQL主从同步超详细过程
  • Kafka面试精讲 Day 6:Kafka日志存储结构与索引机制
  • 【stm32】定时器中断与定时器外部时钟
  • RTSP流端口占用详解:TCP模式与UDP模式的对比
  • 首届中国AI项目管理大会成功召开圆满闭幕!
  • 【BigWorld 游戏服务器引擎】数据落地方案自动化详解,及Java实现方案的探索
  • 关于ES中文分词器analysis-ik快速安装
  • 理解用户需求
  • word删除指定页面
  • Django get_or_create 方法详解
  • AP5414:高效灵活的LED驱动解决方案,点亮创意生活
  • LangGraph MCP智能体开发
  • Docker学习笔记(一):容器基础、生态与安装实践
  • XSENS VISION NAVIGATOR助力智能城市自动化清洁机器人精确导航
  • 深度学习三大框架对比评测:PaddlePaddle、PyTorch 与 TensorFlow
  • 【2025ICCV】基于 ​CL-Splats​ 的3D高斯溅射模型
  • 第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI
  • TypeScript 与 Java 重载机制对比
  • WebAppClassLoader(Tomcat)和 LaunchedURLClassLoader(Spring Boot)类加载器详解
  • “路桥养护”--奏响城市交通的安全乐章
  • 前端框架(Vue/React):界面更新的运行链路
  • Kafka Topic(主题)详解
  • 四维轻云:多期地理数据管理的得力助手
  • 14,FreeRTOS二值信号量操作
  • 差分隐私在运营指标:ABP 的 DP 计数器与噪声预算
  • 一文读懂RAG:从生活场景到核心逻辑,AI“查资料答题”原来这么简单
  • Wan2.2AllInOne - Wan2.2极速视频生成模型,4步极速生成 ComfyUI工作流 一键整合包下载
  • Java全栈学习笔记29