焦點熱門:#Spdlog# Spdlog的編譯與使用
“文章所涉及內容更多來自網絡,在此聲明,并感謝知識的貢獻者!”
CMake—Cmake簡介
CMake是一個跨平臺的編譯(Build)工具,可以用簡單的語句來描述所有平臺的編譯過程。
(相關資料圖)
CMake能夠輸出各種各樣的makefile或者project文件,能測試編譯器所支持的C++特性,類似UNIX下的automake。
CMake 不僅可以編譯源代碼、制作程序庫、產生適配器(wrapper)、還可以用任意的順序建構執行檔。CMake 支持 in-place 建構(二進檔和源代碼在同一個目錄樹中)和 out-of-place 建構(二進檔在別的目錄里),因此可以很容易從同一個源代碼目錄樹中建構出多個二進檔。CMake 也支持靜態與動態程式庫的建構。
https://blog.csdn.net/weixin_45525272/article/details/122053959
下載并安裝Cmake
https://cmake.org/download/
Cmake編譯教程
https://www.bilibili.com/read/cv14249845
https://blog.csdn.net/m0_61812914/article/details/127952081
Eigen—Eigen簡介:
Eigen是一個高層次的C ++庫,有效支持線性代數,矩陣和矢量運算,數值分析及其相關的算法。
下載Eigen源碼
https://eigen.tuxfamily.org/index.php?title=Main_Page
https://gitlab.com/libeigen/eigen/-/releases/3.4.0
編譯安裝Eigen源碼
https://www.likecs.com/show-204786214.html#sc=2625
https://blog.csdn.net/OOFFrankDura/article/details/103586893
PCL—PCL簡介
PCL(Point CloudLibrary)是在吸收了前人點云相關研究基礎上建立起來的大型跨平臺開源C++編程庫,它實現了大量點云相關的通用算法和高效數據結構,涉及到點云獲取、濾波、分割、配準、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操作系統平臺,可在Windows、Linux、Android、Mac OS X、部分嵌入式實時系統上運行。如果說OpenCV是2D信息獲取與處理的結晶,那么PCL就在3D信息獲取與處理上具有同等地位,PCL是BSD授權方式,可以免費進行商業和學術應用。
https://blog.csdn.net/qq_41951923/article/details/103375681
https://blog.csdn.net/expert_joe/article/details/123342098
下載并安裝PCL
https://github.com/PointCloudLibrary/pcl/releases/tag/pcl-1.8.1
下載PCL源碼
http://pointclouds.org/documentation/index.html
編譯PCL
https://blog.csdn.net/weixin_43186817/article/details/103469057
https://blog.csdn.net/luolaihua2018/article/details/116919716
https://blog.csdn.net/hanxue20100/article/details/116654750
https://blog.csdn.net/weixin_44456692/article/details/113508167
https://blog.csdn.net/whutt_/article/details/122756505
https://blog.csdn.net/m0_61812914/article/details/127952081
Spdlog編譯—Spdlog簡介
spdlog是一款優秀的基于C++11的輕量級的日志管理庫,使用時只需要引入頭文件即可。將記錄日志交給spdlog,事半功倍。
下載spdlog源碼
https://github.com/gabime/spdlog
編譯spdlog源碼
使用Cmake GUI編譯spdlog
-在spdlog源碼中新建build文件夾
-在Cmake Gui 配置項目的編譯信息
-配置VS的屬性
-點擊Generate,生成spdlog.sln
-vs 2017編譯生成 spdlog.dll
生成的目標文件:
spdlog_project\spdlog-1.x\build\Release\spdlog.lib
Spdlog調用—-新建項目
-創建第三方庫文件夾
-將編譯生成的spdlog.lib文件復制到第三方庫ThirdLib文件夾
-將spdlog源碼中include文件夾下的spdlog文件夾復制到ThirdLib文件夾
-配置spdlog庫的引用信息
https://www.jianshu.com/p/64bcc1fe3fab
-在自定義類中引用spdlog
-運行效果
Spdlog教程—Spdlog特性
-非常快
-只包含頭文件
-無需依賴第三方庫
-支持跨平臺 - Linux /Windows on 32/64 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)當天日志(spdlog::daliy_logger):記錄當天的所有日志,但在指定時間點會把日志清空
2)循環日志(spdlog::rotating_logger):日志創建成功后,如果寫入的日志大小超過限制就會寫入到新日志文件中去。不過同時存在的日志總數是有上限的,達到上限后按指定策略淘汰。需要特別注意的是日志更迭的規則是:當日志A存滿時,將日志A名稱更改為B,再新建一個日志命名為A,依次類推,直到達到上限數字
3)單個日志(spdlog::basic_logger):只有一個日志文件,所有日志都會在該文件中累加
除了3種文件日志外,輸出終端(控制臺)也比較常用啦
4)輸出終端(spdlog::stdout_color):日志打印至終端,不同等級日志顏色不同
Spdlog 日志等級
enum level_enum {
trace= SPDLOG_LEVEL_TRACE 0
debug= SPDLOG_LEVEL_DEBUG 1
info = SPDLOG_LEVEL_INFO 2(默認輸出等級)
warn= 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)把新的日志丟掉(需要設定:spdlog::set_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 15:35:46 2014
%C 兩位年份,例如14
%Y 四位年份,例如2014
%D 或 %x MM/DD/YY格式日期,例如"08/23/14
%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小時時間,例如02:55:02 pm
%R 等價于%H:%M,例如23:55
%T 或 %X HH:MM:SS
%z 時區UTC偏移,例如+02:00
%+ 表示默認格式
Spdlog 刷新參數:
刷新方式指日志何時寫入文件中,spdlog提供了兩種刷新方式:
1)程序正常退出時寫入(默認)
2)程序運行中,在指定位置進行寫入(實時刷新日志,便于鎖定錯誤所在位置)
要想使用實時刷新日志,spdlog提供了兩種方法:
方法一:logger對象->flush_on(設定等級),flush_on是一次性刷新,執行到此時按照設定等級進行日志刷新。
方法二:logger對象->flush_every(周期時間),flush_every是設置刷新周期,定時進行刷新。刷新的級別采取默認了。
參考資料:
https://zhuanlan.zhihu.com/p/337877916
https://blog.csdn.net/xmcy001122/article/details/105864473/?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242
https://www.cnblogs.com/Braveliu/p/12375556.html
https://www.jianshu.com/p/b0322391d?a9f
https://www.freesion.com/article/397888765/
https://blog.gmem.cc/spdlog
http://www.360doc.com/content/20/0114/10/65839724_886099666.shtml
https://blog.csdn.net/gls_nuaa/article/details/126738472
https://blog.csdn.net/qq_36583051/article/details/115628620
https://cloud.tencent.com/developer/article/2102109
常見問題—VS SDK安裝:
VS2017報錯之“errorMSB8036: 找不到 Windows SDK 版本8.1。請安裝所需的版本的 Windows SDK 或...”解決方法
https://blog.csdn.net/weixin_43051346/article/details/122407923
"0xa0"轉換為十進制為160,表示漢字的開始。這種錯誤主要是因為拷貝導致,在程序頭或者尾部,可能又空格之類的符號
https://blog.csdn.net/yunken28/article/details/96331082
https://blog.csdn.net/lihaidong1991/article/details/104503187
責任編輯:孫知兵
免責聲明:本文僅代表作者個人觀點,與太平洋財富網無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
如有問題,請聯系我們!
- 四大證券報精華摘要:2月7日2023-02-07
- 全球最資訊丨萬家基金將成中泰證券控股子公2023-02-07
- 出境團隊游試點恢復 上市公司推多樣化產品2023-02-07
- 全球觀天下!無業務收入未開展合作 多家公2023-02-07
- 每日看點!假冒上市公司事件頻出 眾籌集資2023-02-07
- 天天通訊!皇氏集團加速跨界押寶鈣鈦礦電池2023-02-07
- 環球視訊!別知己簡譜歌譜完整版_別知己簡2023-02-07
- 【環球財經】英國央行官員釋放利率上升言論2023-02-07
- 環球短訊!揚州金泉:提供更多可能性 為全2023-02-07
- 全球微資訊!巴比食品“炒股”致凈利降近三2023-02-07
- 坤泰股份: 聚焦汽車內飾件 提升行業優勢2023-02-07
- 稅務部門曝光一批涉稅案件2023-02-07
- 【天天聚看點】三步清蒸鱸魚2023-02-07
- 當前視點!云海金屬獲30家機構調研:青陽項2023-02-06
- 每日熱點:建業地產1月物業合同銷售額28.712023-02-06
- 中原建業1月在管項目合約銷售13.67億元,同2023-02-06
- 2023年安徽省將新增城市“口袋公園”200個2023-02-06
- 江山歐派及江山轉債被評級機構列入關注2023-02-06
- 焦點簡訊:網傳“禁酒令”引白酒股下跌 白2023-02-06
- 觀察:【財經分析】北向流入放緩是“意料之2023-02-06
- 機器人:公司半導體裝備業務擴展速度明顯2023-02-06
- 南京舉辦2023年首場土地招商推介活動2023-02-06
- 當前快看:綠城中國:1月總合同銷售金額約132023-02-06
- 魅族20系列已經入網,新機將搭載UWB功能2023-02-06
- 每日速訊:2022年科創板IPO終止40家 因財2023-02-06
- 法拉第未來達成1.35億美元融資 FF 91 Fu2023-02-06
- 家庭性教育從父母自我學習提升起步2023-02-06
- 焦點快播:東北證券遭證監會立案,涉嫌保薦2023-02-06
- 世界快資訊:雷聲滾滾!5家A股公司接連被立2023-02-06
- 環球頭條:融創中國:1月合同銷售額約72.3億元2023-02-06
精彩推薦
- 環球視訊!別知己簡譜歌譜完整版_別知己...
- 稅務部門曝光一批涉稅案件
- 【天天聚看點】三步清蒸鱸魚
- 每日熱點:建業地產1月物業合同銷售額28...
- 中原建業1月在管項目合約銷售13.67億元,...
- 2023年安徽省將新增城市“口袋公園”200個
- 南京舉辦2023年首場土地招商推介活動
- 當前快看:綠城中國:1月總合同銷售金額...
- 家庭性教育從父母自我學習提升起步
- 環球頭條:融創中國:1月合同銷售額約72.3億元
- 世界微速訊:保利發展擬23億打包轉讓12...
- 環球時訊:大唐集團終止出售廈門盛善領...
- 刷牙時刷舌苔好不好用_刷牙時刷舌苔好不好
- 保利置業:1月合同銷售額約49億元,同比增105%
- 當前頭條:中國海外發展:1月合約物業銷...