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://www.pswp.cn/pingmian/95776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95776.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FreeRTOS項目(序)目錄

這章是整個專欄的目錄&#xff0c;負責記錄這個小項目的開發日志和目錄。附帶總流程圖。 目錄 項目簡介 專欄目錄 開發日志 總流程圖 項目簡介 本項目基于STM32C8T6核心板和FreeRTOS&#xff0c;實現一些簡單的功能。以下為目前已實現的功能。 &#xff08;1&#xff09…

Python 多任務編程:進程、線程與協程全面解析

目錄 一、多任務基礎&#xff1a;并發與并行 1. 什么是多任務 2. 兩種表現形式 二、進程&#xff1a;操作系統資源分配的最小單位 1. 進程的概念 2. 多進程實現多任務 2.1 基礎示例&#xff1a;邊聽音樂邊敲代碼 2.2 帶參數的進程任務 2.3 進程編號與應用注意點 2.3.…

ADSL技術

<摘要> ADSL&#xff08;非對稱數字用戶線路&#xff09;是一種利用傳統電話線實現寬帶上網的技術。其核心原理是頻率分割&#xff1a;將一根電話線的頻帶劃分為語音、上行數據&#xff08;慢&#xff09;和下行數據&#xff08;快&#xff09;三個獨立頻道&#xff0c;從…

信號衰減中的分貝到底是怎么回事

問題&#xff1a;在一個低通濾波中&#xff0c;經常會看到一個值-3dB&#xff08;-3分貝&#xff09;&#xff0c;到底是個什么含義&#xff1f; 今天我就來粗淺的講解這個問題。 在低通濾波器中&#xff0c;我們說的 “截止頻率”&#xff08;或叫 - 3dB 點&#xff09;&…

工具分享--IP與域名提取工具2.0

基于原版的基礎上新增了一個功能點:IP-A段過濾&#xff0c;可以快速把內網192、170、10或者其它你想要過濾掉的IP-A段輕松去掉&#xff0c;提高你的干活效率&#xff01;&#xff01;&#xff01; 界面樣式預覽&#xff1a;<!DOCTYPE html> <html lang"zh-CN&quo…

如何通過日志先行原則保障數據持久化:Redis AOF 和 MySQL redo log 的對比

在分布式系統或數據庫管理系統中&#xff0c;日志先行原則&#xff08;Write-Ahead Logging&#xff0c;WAL&#xff09; 是確保數據一致性、持久性和恢復能力的重要機制。通過 WAL&#xff0c;系統能夠在發生故障時恢復數據&#xff0c;保證數據的可靠性。在這篇博客中&#x…

臨床研究三千問——臨床研究體系的3個維度(8)

在上周的文章中&#xff0c;我們共同探討了1345-10戰策的“臨床研究的起點——如何提出一個犀利的臨床與科學問題”。問題固然是靈魂&#xff0c;但若沒有堅實的骨架與血肉&#xff0c;靈魂便無所依歸。今天&#xff0c;我們將深入“1345-10戰策”中的“3”&#xff0c;即支撐起…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年9月7日第172彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺4-5個和值&#xff0c;可以做到100-300注左右。(1)定位…

萬字詳解網絡編程之socket

一&#xff0c;socket簡介1.什么是socketsocket通常也稱作"套接字"&#xff0c;?于描述IP地址和端?&#xff0c;是?個通信鏈的句柄&#xff0c;應用程序通常通過"套接字"向?絡發出請求或者應答?絡請求。?絡通信就是兩個進程間的通信&#xff0c;這兩…

維度躍遷:當萬物皆成電路,智能將從“擁有”變為“存在”

我們習以為常的電子世界&#xff0c;其本質是一個由電路構成的精密宇宙。而一場從二維到三維的終極變革&#xff0c;正在悄然醞釀&#xff0c;它將徹底顛覆我們創造和交互的方式。一、電子世界的本質&#xff1a;一切都是電路 在深入未來之前&#xff0c;我們首先要理解當下。電…

大語言模型預訓練數據采集與清洗技術實踐:從語料到知識庫的全流程優化

大語言模型(LLM)的性能上限由 “數據質量 數據規模 數據多樣性” 共同決定 —— 預訓練階段的海量語料決定模型的泛化能力與語言理解基礎,而知識庫數據則決定模型的知識準確性與領域專業性。當前 LLM 落地面臨的核心痛點之一,便是 “數據臟、處理難、知識雜”:預訓練語料…

模擬音頻采集設備的制作

模擬音頻程序與設備的制作 需要設備 esp32s3 pcm1808 pcm5102(非必須) 程序界面 程序代碼 代碼鏈接

Java Modbus通信實戰(四):Modbus通信測試與故障排查

在工業現場&#xff0c;設備通信系統就像工廠的神經網絡&#xff0c;連接著各種傳感器、控制器和執行器。當你搭建好這套系統后&#xff0c;最關鍵的一步就是全面測試&#xff0c;確保每個環節都能正常工作。 就像汽車出廠前要經過嚴格的路試一樣&#xff0c;Modbus RTU通信系統…

少兒編程C++快速教程之——1. 基礎語法和輸入輸出

1. 歡迎來到C編程世界&#xff01; 1.1 什么是編程&#xff1f; 編程就像是給計算機寫一份詳細的"說明書"&#xff0c;告訴它該做什么、怎么做。C是一種強大的編程語言&#xff0c;可以用來創建游戲、應用程序和各種有趣的軟件&#xff01; 1.2 第一個C程序&#xff…

arma::imat22

arma::imat22 是 Armadillo C 線性代數庫中定義的一個固定大小的 2x2 有符號整數矩陣類型。它主要用于處理小型、維度在編譯時已知的整數矩陣&#xff0c;因其在棧上分配內存&#xff0c;故通常比動態矩陣有更高的效率。 下面是一個匯總了 arma::imat22 主要特性的表格&#xf…

狗都能看懂的HunYuan3D 1.0詳解

HunYuan3D 1.0 HunYuan3D 1.0是2024年9月發布的一篇論文。雖然站在現在的時間節點&#xff0c;HunYuan3D系列已經出到2.5了&#xff0c;但是1.0版本的改進思路&#xff0c;和它trick集成的做法&#xff0c;還是很值得學習的。由于文章用到了很多技術&#xff0c;由于篇幅有限&a…

踏腳邁入奇幻樂園

每天早上上班的路上都會經過一個小花園。它被夾在丁字路口的拐角&#xff0c;面積不大&#xff0c;匆匆而過的行人都不會注意到它。但如果順著幾個不起眼的入口走進去&#xff0c;里面卻是別有洞天。清早的街道還沒有車水馬龍的喧嘩&#xff0c;花園里靜悄悄的。各式各樣的花草…

內存越界引發線程函數調用堆棧回溯異常以及INT 3軟中斷實戰分析案例分享

目錄 1、問題說明 2、導出dump文件時只是遇到了INT 3軟中斷&#xff0c;并沒有發生異常崩潰 3、函數中發生了棧內存越界&#xff0c;導致線程的棧回溯出異常&#xff0c;堆棧中只顯示一行函數調用記錄 3.1、處理Json數據時產生了異常 3.2、函數中發生棧內存越界&#xff0…

LeetCode 240: 搜索二維矩陣 II - 算法詳解(秒懂系列

文章目錄LeetCode 240: 搜索二維矩陣 II - 算法詳解題目描述Java解決方案算法思路核心理念為什么選擇右上角&#xff1f;可視化演示過程示例1&#xff1a;查找 target 5示例2&#xff1a;查找 target 20 (不存在)算法分析時間復雜度空間復雜度算法優勢關鍵要點擴展思考LeetCo…

洛谷 B4071 [GESP202412 五級] 武器強化

思考難度低&#xff0c;但是代碼難度相對較高的題&#xff0c;故做個記錄。首先&#xff0c;題目說了要花費最少的錢&#xff0c;所以我們每次拿最便宜的材料給武器1思想&#xff1a;每次都拿最便宜的材料然后考慮一下這個思想是否正確&#xff0c;找一下反例&#xff0c;每次拿…