文章所涉及內容更多來自網絡,在此聲明,并感謝知識的貢獻者!

CMake—

Cmake簡介

CMake是一個通博娛樂城快速開戶跨平臺的編譯(Build)工具,可以用簡單的語句來描述所有平臺的編譯過程。

(相關資料圖)

CMake能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。

CMake 不僅可以編譯源代碼、制作程序庫、產生適配器(rapper)、還可以用任意的順序建構執行檔。CMake 支持 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄里),因此可以很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支持靜態與動態程式庫的建構。

sblogcsdnneteixin_45525272articledetails122053959

下載并安裝Cmake

scmakeorgdonload

Cmake編譯教程

sbilibilireadcv14249845

sblogcsdnnetm0_61812914articledetails127952081

Eigen—

Eigen簡介:

Eigen是一個高層次的C ++庫,有效支持線性代數,矩陣和矢量運算,數值解析及其相關的算法。

下載Eigen源碼

seigentuxfamilyorgindexphp?title=Main_Page

sgitlablibeigeneigen-releases340

編譯安裝Eigen源碼

slikecssho-204786214#sc=2625

sblogcsdnnetOOFFrankDuraarticledetails103586893

PCL—

PCL簡介

PCL(Point CloudLibrary)是在吸收了前人點云相關研究基礎上建立起來的大型跨平臺開源C++編程庫,它實現了大量點云相關的通用算法和高效數據結構,涉及到點云獲取、濾波、分割、配準、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操纵系統平臺,可在Windos、Linux、Andro、Mac OS X、部分嵌入式實時系統上運行。假如說OpenCV是2D信息獲取與處理的結晶,那么PCL就在3D信息獲取與處理上具有同等身份,PCL是BSD授權方式,可以免費進行商業和學術應用。

sblogcsdnnet_41951923articledetails103375681

sblogcsdnnetexpert_joearticledetails1233428

下載并安裝PCL

sgithubPointCloudLibrarypclreleasestagpcl-181

下載PCL源碼

pointcloudsorgdocumentationindex

編譯PCL

sblogcsdnneteixin_43186817art通博娛樂城怎麼開戶icledetails103469057

sblogcsdnnetluolaihua2024articledetails116919716

sblogcsdnnethanxue20240articledetails116654750

sblogcsdnneteixin_44456692articledetails113508167

sblogcsdnnethutt_articledetails122756505

sblogcsdnnetm0_61812914articledetails127952081

Spdlog編譯—

Spdlog簡介

spdlog是一款優秀的基于C++11的輕量級的日志控制庫,使用時只必须引入頭文件即可。將記錄日志交給spdlog,事半功倍。

下載spdlog源碼

sgithubgabimespdlog

編譯spdlog源碼

使用Cmake GUI編譯spdlog

-在spdlog源碼中新建build文件夾

-在Cmake Gui 配置項目的編譯信息

-配置VS的屬性

-點擊Generate,生成spdlogsln

-vs 2024編譯生成 spdlogdll

生成的目標文件:

spdlog_project\spdlog-1x\build\Release\spdloglib

Spdlog調用—

-新建項目

-創建第三方庫文件夾

-將編譯生成的spdloglib文件復制到第三方庫ThirdLib文件夾

-將spdlog源碼中include文件夾下的spdlog文件夾復制到ThirdLib文件夾

-配置spdlog庫的引用信息

sjianshup64bcc1fe3fab

-在自定義類中引用spdlog

-運行功效

Spdlog教程—

Spdlog特性

-非常快

-只涵盖頭文件

-無需依賴第三方庫

-支持跨平臺 – Linux Windos on 3264 bits

-支持多線程

-可對日志文件進行循環輸出

-可每日生成日志文件

-支持管理臺日志輸出

-可選的異步日志

-支持日志輸出級別

-可自定義日志形式

Spdlog 性能:

Spdlog只有一個管家register,管家依照日志名字控制所有日志(即文件日志和管理臺日志),管家有提供许多服務,主要有輸出日志級別,刷新文件日志方式,設置日志形式等

Spdlog 結構:

spdlog可以分成三級結構通博娛樂城客戶服務,從上而下是logger registry、logger、sink,其各自性能如下:

logger registry(日志控制器):負責控制所有的logger,用戶建立的所有logger都會在registry處進行登記然后統一控制

logger(日志記錄器):是用戶直接操纵的對象,通過操纵logger進行日志邏輯的生成

sink(日志記錄器槽):受logger管理,執行具體的動作(動作包括寫入日志文件輸出到管理臺)

一個logger registry管多個logger,一個logger管多個sink。logger registry中的logger是通過name進行對應的。后面使用的時候可以直接通過名稱獲取對應的日志對象。

有了這種層級結構,在代碼調用的時候,logger的每個操纵都會下順到sink層面,調用sink的對象。比如像一些set_pattern()和set_level()。

日志庫的目的就是把日志信息寫到指定地方。從上面對于結構的性能描述,sink才是真正操纵日志進行寫操纵的結構,那sink可以把日志信息寫到哪里呢?主要有三個去向:  1)管理臺輸出(stdout)——默認輸出方式  2)日志文件  3)數據庫或其他外部實體

Spdlog 存儲:

spdlog中提供了以下幾種存放方式:

1)當天日志(spdlogdaliy_logger):記錄當天的所有日志,但在指定時間點會把日志清空

2)循環日志(spdlogrotating_logger):日志創建成功后,假如寫入的日志大小超過限制就會寫入到新日志文件中去。不過同時存在的日志總數是有上限的,達到上限后按指定策略淘汰。必须特別注意的是日志更迭的規則是:當日志A存滿時,將日志A名稱更换為B,再新建一個日志命名為A,依次類推,直到達到上限數字

3)單個日志(spdlogbasic_logger):只有一個日志文件,所有日志都會在該文件中累加

除了3種文件日志外,輸出終端(管理臺)也比較常用啦

4)輸出終端(spdlogstdout_color):日志打印至終端,不同等級日志顏色不同

Spdlog 日志等級

enum level_enum {

trace= SPDLOG_LEVEL_TRACE 0

debug= SPDLOG_LEVEL_DEBUG 1

info = SPDLOG_LEVEL_INFO 2(默認輸出等級)

arn= SPDLOG_LEVEL_WARN 3

err= SPDLOG_LEVEL_ERROR 4

critical= SPDLOG_LEVEL_CRITICAL 5

off = SPDLOG_LEVEL_OFF 6

}

日志級別

管理臺日志級別

SPDLOG_DEBUG

SPDLOG_INFO

SPDLOG_WARN

SPDLOG_ERROR

SPDLOG_CRITICAL

旋轉日志級別

SPDLOG_INFO_FILE

SPDLOG_WARN_FILE

SPDLOG_ERROR_FILE

SPDLOG_CRITICAL_FILE

Spdlog 異步與同步

同步異步指日志信息是否直接輸出寫入文件,直接寫就是同步,稍后寫就是異步。spdlog默認的狀態就是同步了。

異步狀態下,日志會先存入隊列,然后由線程從隊列中取數據,當隊列滿的時候會有淘汰策略。假如工作線程中拋出了異常,向隊列寫入下一條日志時異常會再次拋出,可以在寫入隊列時逮捕工作者線程的異常,淘汰策略一般兩種:

1)阻塞新來的的日志,直到隊列有剩余空間(默認處理方式)

2)把新的日志丟掉(必须設定:spdlogset_async_mode(隊列大小,

Spdlog 單線程與多線程

spdlog中提供了單線程和多線程模式,由使用者在對象創建中自己指定。  st:單線程版本,不用加鎖,效率高,但不保證線程安全  mt:多線程版本,保證多線程并發情況線程安全,但效率稍低

Spdlog 輸出形式:

Pattern說明

輸出形式的Pattern中可以有若干 %開頭的標記,含義如下表:

標記 說明

%v 實際必须被日志記錄的文本,假如文本中有{占位符}會被替換

%t 線程標識符

%P 進程標識符

%n 日志記錄器名稱

%l 日志級別

%L 日志級別簡寫

%a 簡寫的周幾,例如Thu

%A 周幾,例如Thursday

%b 簡寫的月份,例如Aug

%B 月份,例如August

%c 日期時間,例如Thu Aug 23 153546 2024

%C 兩位年份,例如14

%Y 四位年份,例如2024

通博娛樂城玩法大全

%D 或 %x MMDDYY形式日期,例如”082314

%m 月份,1-12之間

%d 月份中的第幾天,1-31之間

%H 24小時制的小時,0-23之間

%I 12小時制的小時,1-12之間

%M 分鐘,0-59

%S 秒,0-通博娛樂城週年活動59

%e 當前秒內的毫秒,0-999

%f 當前秒內的微秒,0-999999

%F 當前秒內的納秒, 0-999999999

%p AM或者PM

%r 12小時時間,例如025502 pm

%R 等價于%H%M,例如2355

%T 或 %X HHMMSS

%z 時區UTC偏移,例如+0200

%+ 表示默認形式

Spdlog 刷新參數:

刷新方式指日志何時寫入文件中,spdlog提供了兩種刷新方式:

1)程序正常退出時寫入(默認)

2)程序運行中,在指定位置進行寫入(實時刷新日志,便于鎖定錯誤所在位置)

要想使用實時刷新日志,spdlog提供了兩種想法:

想法一:logger對象->flush_on(設定等級),flush_on是一次性刷新,執行到此時依照設定等級進行日志刷新。

想法二:logger對象->flush_every(周期時間),flush_every是設置刷新周期,定時進行刷新。刷新的級別采取默認了。

參考資料:

szhuanlanzhihup337877916

sblogcsdnnetxmcy001122articledetails105864473?utm_medium=distributepc_relevantnone-task-blog-title-2font-size14px;}