深圳南财多媒体有限公司介绍

您當前的位置 :環球傳媒網>前瞻 > 正文
全球微速訊:#Spdlog# Spdlog的編譯與使用
2023-01-12 22:55:54 來源:程序員客棧 編輯:

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


(資料圖片)

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

關鍵詞: 輸出終端 輸出格式

相關閱讀
分享到:
版權和免責申明

凡注有"環球傳媒網"或電頭為"環球傳媒網"的稿件,均為環球傳媒網獨家版權所有,未經許可不得轉載或鏡像;授權轉載必須注明來源為"環球傳媒網",并保留"環球傳媒網"的電頭。

Copyright ? 1999-2017 cqtimes.cn All Rights Reserved 環球傳媒網-重新發現生活版權所有 聯系郵箱:8553 591@qq.com
主站蜘蛛池模板: 广东护栏厂家-广州护栏网厂家-广东省安麦斯交通设施有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 小型单室真空包装机,食品单室真空包装机-百科 | 万家财经_财经新闻_在线财经资讯网 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 | 定制液氮罐_小型气相液氮罐_自增压液氮罐_班德液氮罐厂家 | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 高速混合机_锂电混合机_VC高效混合机-无锡鑫海干燥粉体设备有限公司 | 智能终端_RTU_dcm_北斗星空自动化科技 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 变色龙PPT-国内原创PPT模板交易平台 - PPT贰零 - 西安聚讯网络科技有限公司 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 电脑知识|软件|系统|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 耐磨焊丝,堆焊焊丝,耐磨药芯焊丝,碳化钨焊丝-北京耐默公司 | 广州企亚 - 数码直喷、白墨印花、源头厂家、透气无手感方案服务商! | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 防爆鼓风机-全风-宏丰鼓风机-上海梁瑾机电设备有限公司 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 |