glog的编译和使用

文章目录

    • glog的编译和使用
    • 概述
    • 笔记
    • 测试工程
    • glog0.7这个版本是有问题的
    • 工程的预处理宏
    • 日志测试代码
    • 好使的代码
    • 效果
    • 备注 - 只有C++风格的日志才好使
    • 备注 - glog用不到gflag
    • END

glog的编译和使用

概述

想在DLL中打些日志,测试用。
没用起来。
将gflags和gtest都测试编译测试过了,再整一下glog。

笔记

库地址 https://github.com/google/glog.git
迁出到本地后,切到最新的发布版0.7
用 cmake-gui.exe 配置工程
按照自己工程的要求配置,我这里只配置VS2019X64的版本
在这里插入图片描述
勾选DLL, 测试,安装路径, 剩下的不选。
产生VS工程。
在这里插入图片描述
最后一次用的下面的CMake配置,差别不大。都能用。
在这里插入图片描述

打开工程
在这里插入图片描述
重新生成解决方案
测试,安装
在这里插入图片描述
将release_x64版本也编译了。
将安装结果分别保存为glog_x64_debug/glog_x64_release,归档,供自己的工程用。

测试工程

// testGlogConsole.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "glog/logging.h"#if (defined(_WIN64) && defined(_DEBUG))
#pragma comment(lib, "glogd.lib")
#elif (defined(_WIN64) && defined(NDEBUG))
#pragma comment(lib, "glog.lib")
#endifint main(int argc, char** argv)
{// fLU::FLAGS_max_log_size = 1000;return 0;
}

glog0.7这个版本是有问题的

已启动重新生成…
1>------ 已启动全部重新生成: 项目: testGlogConsole, 配置: Debug x64 ------
1>testGlogConsole.cpp
1>D:\my_dev\lib\glog_x64_debug\include\glog\logging.h(94,51): warning C4244: “return”: 从“_Rep”转换到“long”,可能丢失数据
1>        with
1>        [
1>            _Rep=__int64
1>        ]
1>D:\my_dev\lib\glog_x64_debug\include\glog\logging.h(105,28): warning C4244: “return”: 从“_Rep”转换到“long”,可能丢失数据
1>        with
1>        [
1>            _Rep=__int64
1>        ]
1>D:\my_dev\lib\glog_x64_debug\include\glog\logging.h(503,38): error C4996: 'google::CustomPrefixCallback': Use PrefixFormatterCallback instead.
1>已完成生成项目“testGlogConsole.vcxproj”的操作 - 失败。
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0==========

是不是只有vs2022才能编译过?
看着不像,是头文件就有问题。手工调整头文件内容,可以编译过,不过那样的话,不知道影响内存布局没有?
确定有问题,就不用这个最新发布版了。

那只能将版本往旧版本方向退,直到找到一个能用的最新版本。
退到了glog-0.6版本,包含上这个库, release/debug x64版本都可以编译过。
但是编译glog-0.6版本时,测试不是都通过,估计和我没有勾选所有选项有关系,不管了。

0.6~0.7版本之间,和还有0.6rc1,0.6rc2,我试试。
试了,glog-v0.6-rc2可以,那就这个版本了。

工程的预处理宏

如果用新建的VS2019X64工程的默认预处理宏,程序编译报错,必须加上GLOG需要的预处理宏。

GLOG_NO_SYMBOLIZE_DETECTION
GLOG_NO_ABBREVIATED_SEVERITIES
GLOG_CUSTOM_PREFIX_SUPPORT
GLOG_STATIC_DEFINE

日志测试代码

将工程根目录下的README.rst转成html(python - rst file to html), 按照官方说的,来具体的日志。

int main(int argc, char** argv) {google::InitGoogleLogging("myApp");// 1 > testGlogConsole.obj : error LNK2001 : 无法解析的外部符号 "bool fLB::FLAGS_logtostderr" (? FLAGS_logtostderr@fLB@@3_NA)FLAGS_logtostderr = false;LOG(INFO) << "hello glog";google::ShutdownGoogleLogging();return 0;
}

设置标志时,找不到DLL定义的全局变量。
用IDA看,是有的。
在这里插入图片描述
经过试验,调用glog的工程,要去掉 GLOG_STATIC_DEFINE 的预定义宏才行。

好使的代码

// testGlogConsole.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//// glog预处理宏
/*
WIN32
_WINDOWS
GLOG_NO_SYMBOLIZE_DETECTION
GLOG_NO_ABBREVIATED_SEVERITIES
GLOG_CUSTOM_PREFIX_SUPPORT
// GLOG_STATIC_DEFINE // 不能加这个宏,用DLL导出变量时,编译报错
*/
#include "glog/logging.h"
#include "glog/raw_logging.h"#if (defined(_WIN64) && defined(_DEBUG))#pragma comment(lib, "glogd.lib")
#elif (defined(_WIN64) && defined(NDEBUG))#pragma comment(lib, "glog.lib")
#endifint main(int argc, char** argv) {int status = 0;// 1 > testGlogConsole.obj : error LNK2001 : 无法解析的外部符号 "bool fLB::FLAGS_logtostderr" (? FLAGS_logtostderr@fLB@@3_NA)// 工程的预编译宏要去掉 GLOG_STATIC_DEFINEgoogle::InitGoogleLogging("my_app_log");// FLAGS_max_log_size = 1000; // max log size is 1GBFLAGS_minloglevel = 0; // log allFLAGS_logtostderr = false;FLAGS_logtostdout = false;FLAGS_stderrthreshold = 999; // don't send log info to stderrFLAGS_log_prefix = "my_app_log";FLAGS_minloglevel = 0;FLAGS_log_dir = "d:\\my_tmp"; // 这里必须是一个存在的文件夹,glog不会自动创建不存在的目录// 指定日志的前缀名称google::SetLogFilenameExtension("test_glog.");// FLAGS_stop_logging_if_full_disk = true;// google::EnableLogCleaner(1); // // keep the logs for 1 daysLOG(INFO) << "hello glog";// 只有C++风格的日志好使// RAW_XLOG不好使RAW_LOG(INFO, "log info");RAW_VLOG(3, "status is %i", status);RAW_LOG(INFO, "show info %d: %s", 1, "info");RAW_LOG(WARNING, "show warning %d: %s", 1, "warning");RAW_LOG(ERROR, "show error %d: %s", 1, "error");RAW_LOG(FATAL, "show fatal info %d: %s", 1, "fatal");google::ShutdownGoogleLogging();return 0;
}

效果

在这里插入图片描述

备注 - 只有C++风格的日志才好使

通过实验,只有C++风格的日志好使. e.g. LOG(INFO) << “hello glog”;
RAW_LOG 这种日志都打印不出来。

备注 - glog用不到gflag

这次CMake编译没有配置gflag, 编译出来好使。

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离开大厂创业一年,从未受过这么大的打击!

大家好&#xff0c;我是程序员鱼皮。时间过得真快呀&#xff0c;转眼间我从腾讯出来、自主创业竟然已经整整一年了&#xff01;上周末也带团队同学们搞了场公司周年庆团建。 我自己是一个很喜欢、也很注重复盘总结的人&#xff0c;这么重要的时间&#xff0c;当然要对过去的一…

预测市场?预测股票?如何让预测有更高的准确率?

我们发现在足球赛中&#xff0c;只要知道一个简单的讯息&#xff08;主队过去的获胜机率超过一半&#xff09;&#xff0c;预测力就会明显好过随便乱猜。如果再加上第二个简单的讯息&#xff08;胜负纪录较佳的队伍会略占优势&#xff09;&#xff0c;可以再进一步提升预测力。…

Centos固定静态ip地址

这里我用的是Vmware虚拟机搭建的三台机器 进入 cd /etc/sysconfig/network-scripts然后使用 ip addr命令&#xff0c;查看自己虚拟机的以太网地址。 我这里是ens33 上面的第一个选项是本地环回地址&#xff0c;不用管它 然后查看刚刚进入的network-scripts目录下的文件 找到…

ChatPPT开启高效办公新时代,AI赋能PPT创作

目录 一、前言二、ChatPPT的几种用法1、通过在线生成2、通过插件生成演讲者模式最终成品遇到问题改进建议 三、ChatPPT其他功能 一、前言 想想以前啊&#xff0c;为了做个PPT&#xff0c;我得去网上找各种模板&#xff0c;有时候还得在某宝上花钱买。结果一做PPT&#xff0c;经…

2.1初识Spark

Spark于2009年诞生&#xff0c;最初是加州大学伯克利分校的研究项目。2013年加入Apache孵化器项目&#xff0c;2014年成为Apache顶级项目。Spark以内存内运算技术为核心&#xff0c;包含多个计算框架&#xff0c;成为大数据计算领域的后起之秀&#xff0c;打破了Hadoop的基准排…

域名系统(DNS)、DNS 服务器和 IP 地址概念解释

​  域名系统、DNS服务器和IP地址是构成互联网基础设施的重要部分。它们共同协作&#xff0c;使得人们能够方便地使用各种网络服务&#xff0c;而无需去记住复杂的数字地址。那么&#xff0c;域名系统、DNS 服务器和 IP 地址又该如何理解?本文主要讲讲关于这几个名词的概念解…

多线程使用说明

一、如何创建多线程 1、继承Thread类 如果调用run方法&#xff0c;相当于还是只有一条main线程&#xff0c;会把run的线程当成一条普通对象&#xff0c;如下&#xff0c;t会执行完再往下执行&#xff0c;这样t就不是一个线程类&#xff0c;而是一个普通的对象&#xff0c;所以必…

Python网络编程 03 实验:FTP详解

文章目录 一、小实验FTP程序需求二、项目文件架构三、服务端1、conf/settings.py2、conf/accounts.cgf3、conf/STATUS_CODE.py4、启动文件 bin/ftp_server.py5、core/main.py6、core/server.py 四、客户端1、conf/STATUS_CODE.py2、bin/ftp_client.py 五、在终端操作示例 一、小…

2024华为数通HCIP-datacom最新题库(变题版)

请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 请注意&#xff0c;华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了&#xff0c;如果你准备去考试&#xff0c;还是用的之前的题库&#xff0c;切记暂缓。 H1…

本地搭建springboot服务并实现公网远程调试本地接口

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HTML5 Canvas发光Loading动画源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

8.删除有序数组中的重复项 II

文章目录 题目简介题目解答解法一&#xff1a;双指针&#xff08;快慢指针&#xff09;代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 删除有序数组中的重复项 II 相关的讲解&#xff01;&#x1f600; 题目简介 题目解…

学习100个Unity Shader (17) --- 深度纹理

文章目录 效果shader部分C# 部分理解参考 效果 shader部分 Shader "Example/DepthTexture" {SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _CameraDepthTexture;struct a2v{float4 pos : POSITIO…

运行时数据区-基础

运行时数据区-基础 为什么学习运行时数据区Java内存区域&#xff08;运行时数据区域&#xff09;和内存模型&#xff08;JMM&#xff09; 区别组成部分&#xff08;jdk1.7 / jdk1.8&#xff09;从线程隔离性分类与类加载的关系每个区域的功能参考文章 为什么学习运行时数据区 …

文献速递:深度学习医学影像心脏疾病检测与诊断--基于深度学习的PET图像重建与运动估计

Title 题目 Deep Learning Based Joint PET Image Reconstruction and Motion Estimation 基于深度学习的PET图像重建与运动估计 01 文献速递介绍 正电子发射断层扫描&#xff08;PET&#xff09;成像是一种非侵入性成像技术&#xff0c;通过使用放射性示踪剂在活体内可视化…

架构师:搭建Spring Security、OAuth2和JWT 的安全认证框架

1、简述 Spring Security 是 Spring 生态系统中的一个强大的安全框架,用于实现身份验证和授权。结合 OAuth2 和 JWT 技术,可以构建一个安全可靠的认证体系,本文将介绍如何在 Spring Boot 中配置并使用这三种技术实现安全认证,并分析它们的优点。 2、Spring Security Spri…

营销H5测试综述

H5页面是营销域最常见的一种运营形式&#xff0c;业务通过H5来提供服务&#xff0c;可以满足用户对于便捷、高效和低成本的需求。H5页面是业务直面用户的端点&#xff0c;其质量保证工作显得尤为重要。各业务的功能实现具有通用性&#xff0c;相应也有共性的测试方法&#xff0…

[1726]java试飞任务规划管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java试飞任务规划管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

VS code放大缩小

​ 放大 ctrl和一起按 缩小 ctrl和-一起按 上面是键盘组合方式&#xff0c;如果需要Ctrl滚轮实现代码的缩放&#xff0c;可以这样。 在文件-->首选项-->设置-->用户设置&#xff1a; 在搜索栏输入mouseWheelZoom 选中即可。 ​ 输入 mouseWheelZoom 进行搜素 特…

linux 使用intel oneapi报错报错

使用intel oneapi 2024.1.0 时经常报这个错误 因为当前 intel2024.1.0没有在使用 需要改回2024.0.0并安装适配的torch的包来运行