您的位置: 首页 > 业界 > 正文

天天观察:#Spdlog# Spdlog的编译与使用

2023-01-13 00:58:36 来源:程序员客栈

“文章所涉及内容更多来自网络,在此声明,并感谢知识的贡献者!”

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

关键词: 输出终端 输出格式

广东省化妆品出口额全国居首 多家企业率先实现智能制造
化妆品生产企业数量占全国超一半、工业总产值全国第一,出口额占全国35 1%、居全国第一,专利申请数量全国第一、是第二名的2 4倍……近日,
2022-09-21
415只个股市值低于20亿元 散户投资者将被逐渐边缘化
数据显示,截至8月5日收盘,A股共有415只个股市值低于20亿元,占整体A股总数的近一成。业内专家认为,随着注册制的全面实施,小市值股的数
2022-08-29
湖南省人社厅公布7个热门职业的专项职业能力考核规范
怎样开展直播、进行直播复盘?母婴护理需要掌握哪些技巧……近日,湖南省人社厅公布电商直播销售、母婴护理等7个热门职业的专项职业能力考核
2022-06-20
唐山曹妃甸推动京津冀协同发展 产业协同转移全面提速
春暖渤海湾,书写新画卷。位于唐山曹妃甸的金隅天坛(唐山)木业科技有限公司的生产车间内一片繁忙景象——铺装、压机、翻板等工作正紧张有序
2022-03-19
石家庄海关共签发RCEP原产地证书864份 货值3.9亿元
自今年1月1日RCEP(《区域全面经济伙伴关系协定》)正式实施以来,截至3月14日,石家庄海关共签发RCEP原产地证书864份,货值3 9亿元。据介绍
2022-03-19
蚌埠海关累计签发RCEP原产地证书35份 涉及金额2583.09万元
在蚌埠海关报关大厅原产地证办理窗口,海关关员仔细核对着递交过来的材料。十分钟后,一份RCEP原产地证书打印盖章后交到了企业业务员手中。
2022-03-19
天天观察:#Spdlog#  Spdlog的编译与使用
“文章所涉及内容更多来自网络,在此声明,并感谢知识的贡献者!”CMake—Cmake简介CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所
2023-01-13
环球今日讯!拼事业、扛压力 美国女性愈发不愿生孩子
新华社北京1月12日电美国官方调查显示,受职场竞争激烈、育儿成本上升等因素影响,近些年来美国女性生育率持续下降。当前,15岁至44岁年龄段女
2023-01-12
全球消息!中文在线完成晨之科业绩承诺股份补偿注销 预计影响2022年5893万元净利润
日前,中文在线发布关于业绩承诺补偿股份注销完成的公告。公告中指出,中文在线在2017年审计通过了公司发行股份及支付现金购买朱明等所持有的
2023-01-12
世界微动态丨口碑中现争议 动画作品《中国奇谭》引关注
中新社北京1月11日电(记者高凯)“这才是中国动画该有的样子”“真的惊艳,当年《大闹天宫》的上美(上海美术电影制片厂)终于又回来了”,播
2023-01-12
世界今日讯!五粮液:融资净买入606.54万元,融资余额68.66亿元(01-11)
2023年1月11日五粮液融资净买入606 54万元,融资余额68 66亿元
2023-01-12
快报:41岁资深女星遭热议,没得奖当场摆臭脸,翘二郎腿满脸不乐意
万千星辉颁奖典礼一直都是TVB的老牌颁奖典礼,非常出名,甚至还被称呼为是TVB的一个大联欢活动。几乎所有TVB的艺人都会前来出席的,而这一次活
2023-01-12
沧州:8个重大科技专项项目确定 引领经济社会高质量发展
为充分发挥科技在经济社会高质量发展中的引领和支撑作用,沧州市确定8个项目为2021年全市重大科技专项项目。这8个重大科技专项项目分别为:
2022-03-19
  中新网海口1月23日电(王子谦 符宇群)海南省高级人民法院院长陈凤超23日说,2021年海南法院为自贸港建设提供坚强司法保障,全年有效管
2022-01-24
  新华社武汉1月23日电(记者王贤)随着春节假期临近,从广州、深圳等地返回湖北的旅客较多。为此,23日,武汉站、汉口站、襄阳东站、十堰
2022-01-24
  1月22日0—24时,广东省新增本土确诊病例3例和本土无症状感染者1例,均为珠海报告。23日,珠海市疫情防控新闻发布会上,珠海市政府副秘
2022-01-24
青海海西州德令哈市发生3.7级地震
  据中国地震台网正式测定,1月23日11时58分在青海海西州德令哈市发生3 7级地震,震源深度9千米,震中位于北纬38 40度,东经97 35度。
2022-01-24
  北京2022年冬奥会和冬残奥会颁奖花束已于近期完成交付。与传统的鲜切花不同,这些花束全部采用上海市非物质文化遗产“海派绒线编结技艺
2022-01-24
  中新网宿迁1月23日电 (刘林 张华东)核酸检测是当下及时发现潜在感染者、阻断疫情传播的有效方法。23日,记者从宿迁市宿豫区警方获悉
2022-01-24
  记者从天津市人社局获悉,从明天(24日)起,天津2022年度第一期积分落户申报工作正式开始,这是新修订的《天津市居住证管理办法》《天津
2022-01-24
  中新社北京1月23日电 (记者 刘亮)记者23日从中国海关总署获悉,2021年,中国海关组织开展“国门绿盾”专项行动,在寄递、旅客携带物
2022-01-24
  记者从天津市疫情防控指挥部获悉,天津疫情第341—360例阳性感染者基本信息公布。  目前,这20例阳性感染者已转运至市定点医院做进一
2022-01-24
“最美基层民警”武文斌:案子破了最管用
  中新网吕梁1月23日电 题:“最美基层民警”武文斌:案子破了最管用  作者 高瑞峰  同事称他为“拼命三郎”。从警14年,武文斌破
2022-01-24
  据“西安发布”消息,截至2022年1月23日,雁塔区长延堡街道近14天内无新增本地病例和聚集性疫情。根据国务院联防联控机制关于分区分级
2022-01-24
  中新网西宁1月23日电 (记者 孙睿)据青海省地震台网测定,2022年1月23日10点21分(北京时间)在青海省海西州德令哈市(北纬38 44度,东经
2022-01-24
江西南昌:市民赏年画迎新年 书法家挥毫送春联
  (新春见闻)江西南昌:市民赏年画迎新年 书法家挥毫送春联  1月23日,“赏年画过大年”新年画作品联展江西南昌站活动在江西省文化馆
2022-01-24
  中新网成都1月23日电 (祝欢)成都市第十七届人民代表大会第六次会议23日在成都举行,成都市中级人民法院院长郭彦与成都市人民检察院检
2022-01-24
列车临时停车3分钟救旅客
  (新春见闻)列车临时停车3分钟救旅客  中新网广州1月23日电 (郭军 黄伟伟)“车长,车长,4号车厢有位旅客腹涨难忍,身体不舒服”…
2022-01-24
女子背负命案潜逃24年 因涉疫人员核查落网
  中新网湖州1月23日电(施紫楠 徐盛煜 赵学良)1998年7月,犯罪嫌疑人杜某因家庭琐事,用菜刀将自己的弟媳砍伤致死。案发后,她从老家河
2022-01-24
广东“00后”雄狮少年锤炼功夫迎新春
  (新春见闻)广东“00后”雄狮少年锤炼功夫迎新春  中新社广州1月23日电 题:广东“00后”雄狮少年锤炼功夫迎新春  作者 孙秋霞 
2022-01-24
03-19 2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
2022岳阳国际旅游节开幕 特色农产品展销等系列活动目不暇接
今天,天下洞庭岳阳市君山区第九届良心堡油菜花节暨2022岳阳国际旅游节开幕,菊红、粉红、水红、桃红、紫色、白色等七色组成的4万亩花海在 [详细]
03-19 2022年郴州计划重点推进文旅项目101个 总投资354亿元
2022年郴州计划重点推进文旅项目101个 总投资354亿元
3月16日,我市举行全市文旅项目和城市大提质大融城项目集中开工仪式,市委书记吴巨培宣布项目开工。郴州嘉合欢乐世界、仙福路工地清风徐来 [详细]
03-19 宿州泗县深入推进文旅融合发展 擦亮城市品牌
宿州泗县深入推进文旅融合发展 擦亮城市品牌
近年来,泗县以争创安徽省文化旅游名县为目标,深入推进文旅融合发展,努力擦亮水韵泗州 运河名城城市品牌,全县文化旅游业实现高质量发展 [详细]
03-19 淡季不忘引流 京郊民宿市场有望迎来回暖
淡季不忘引流 京郊民宿市场有望迎来回暖
旅游淡季中的京郊民宿有望成为市场中最先复苏的板块。3月17日,北京商报记者调查发现,虽然正值旅游淡季,且受疫情变化的影响,不过各家民 [详细]
01-24 西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
西安浐灞回应“社区领导怒怼咨询群众”:涉事社区主任已停职
  西安浐灞回应“一社区领导在市民咨询离市政策时发生争执”事件 涉事社区主任已停职  西部网讯(记者 刘望)日前,网络上流传一条视频 [详细]
01-24 宁夏:“草根主播”把货卖 “线上赶集”年味浓
宁夏:“草根主播”把货卖 “线上赶集”年味浓
  (新春走基层)宁夏:“草根主播”把货卖 “线上赶集”年味浓  中新网宁夏红寺堡1月23日电 题:宁夏:“草根主播”把货卖 “线上赶 [详细]
01-24 西安:整区解封前24小时内进行不漏一人的全员核酸检测
西安:整区解封前24小时内进行不漏一人的全员核酸检测
  1月23日15时,陕西省政府新闻办公室举行陕西省新冠肺炎疫情防控工作第四十五场新闻发布会。陕西省卫生健康委员会党组成员、省中医药管 [详细]