glog的基本用法-on win

前言

glog在linux下直接包上头文件和库文件, 就可以用了。
在win下,还涉及glog库的编译选项和测试程序编译选项的匹配问题.
如果选库选到开发版本而不是稳定版,也是有问题。
看其他同学做的glog实验,都是一次成功…
我咋那么背啊,做实验做了好久。

开始选的是glog开发版,在windows下试了一下编译 ,好像还得改下代码。在linux下编译, 好多文件都是带windows回车的,这事弄的. 好像还需要其他库, 库还不一定装的上(和已有的系统有关系),果真是开发版啊。

去下了最新的稳定版glog-0.3.5,先去linux下试了一下。3步(configure, make, make install)完成.
src\logging_unittest.cc中有测试代码,可以看到glog怎么用。写了测试程序,好使。

win版库可以直接编过,但是自己写个测试程序(vs2017默认字符集是unicode), 和编好的glog库不配套。
我想将glog库各个版本都编译出来,以后不管哪个工程,直接包上头和库, 就能直接用了。就在测试程序写好后,研究了一下如何利用vs提供的宏, 来使不同的工程,不同的编译选项能直接包上编译好的glog库,一次编译通过。

手工编译glog的各种配置的库,配合测试程序的各种配置来测试库是否能和测试程序一起编译过, 配置太多了,整蒙了。眼睛和手总是点错,如果整个命令行的脚本来做这事就好了。

通过实验, 可知:
Debug版程序的CRT选项只能是MDd,MTd
Release版程序的CRT选项只能是MD,MT

做完实验可以确认,如果再遇到测试程序和第三方库(不限于glog)因为配置不符合,编译不过的情况,可以用做好的工具(my_verify_project_config.h)打印出的工程配置信息,一次调整编译选项通过,只需要将库和测试程序再编译一次就通过。

glog的错误级别日志,默认会向stderr打印,看着很怪。需要用glog的API设置一下。

glog日志风格是c++风格的,不是很喜欢. 这样就不能将printf直接改成日志.

glog的日志级别也少了点,除了错误级别不能用(居然glog会自己中止程序,手好长),还剩3种日志级别可用(INFO, WARNING, ERROR)。不太喜欢c++风格的日志,要不自己可以再加几种日志级别进去。

实验工程下载点

写了win版和linux版的测试工程.
src_glog_usage_2018_0908_2023.7z

将win版glog库的各种版本都编译出来了[vs2017 + MBCS/UNICODE + Debug/Release + x86/x64 + MD/MDd/MT/MTd], 测试的不完全,也不保证眼睛看花或拷贝库文件时,手突然抖了一下, 拷贝错了。但是,通过这次实验,解决了任何工程和任何库由于工程配置选项不匹配编译不过的问题。利用vs的宏,将工程配置都打出来了,如果库和测试程序在一起编译不过,只要按照打出的工程配置,再调整一次库或测试程序的工程配置,再编译一次就搞定。一般来说,使用的库是第三方的情况居多。这个方法用来调整自己的库选项比较有用(前提是知道第三方的库编译选项是啥)。编译选项整合适了,就不用加忽略库等非标准的手法。

编译时打出的工程配置样例

1>--------------------------------------------------------------------------------
1>>> 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017
1>--------------------------------------------------------------------------------
1>操作系统是windows
1>IDE是vs2017
1>IDE字符集是MBCS
1>工程配置 = Debug
1>工程将要编译为Win64
1>要链接的第三方库的CRT库设置应该为/MTd
1>--------------------------------------------------------------------------------
1><< 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017
1>--------------------------------------------------------------------------------

实验

// @file main.cpp
// @brief 
//	在windows中使用glog库的实验
//	glog库使用方便,要注意的问题是链接的是什么crt库配置, 如果glog库的crt配置和测试工程的crt配置不同,就是各种报错了.

#include "pch.h"
#include <iostream>

#include <windows.h>

#include "my_verify_project_config.h"
#include "my_glog_header.h"

int main(int argc, char** argv)
{
	// glog初始化(设置名称用来拼日志名称, 取pid存起来)
	google::InitGoogleLogging("glog_init");

	// 指定日志位置
	google::SetLogDestination(google::GLOG_INFO, "D:\\my_tmp\\"); // 记录日志级别 > google::GLOG_INFO 级别的日志

	// 指定日志的前缀名称
	google::SetLogFilenameExtension("test_glog.");
	// 日志文件名称 D:\\my_tmp\\test_glog.20180908-182702.1347704
	// 日志的后缀名称为 20180906-163640.17120, 是时间戳字符串
	// LogFileObject::Write 处拼装的日志名称(如果日志文件还没建立或打开)

	google::SetStderrLogging(google::GLOG_FATAL); // 将记录错误日志到ui的功能设置高点, 不让glog向屏幕上打印错误信息
	/*
	// 在glog中,是以下函数向stderr写内容,我不需要这个功能
	// 看代码中FLAGS_stderrthreshold和FLAGS_alsologtostderr的赋值, 知道调用SetStderrLogging()可以不向stderr写日志
	inline void LogDestination::MaybeLogToStderr(LogSeverity severity,
							 const char* message, size_t len) {
	  if ((severity >= FLAGS_stderrthreshold) || FLAGS_alsologtostderr) {
		ColoredWriteToStderr(severity, message, len);
	#ifdef OS_WINDOWS
		// On Windows, also output to the debugger
		::OutputDebugStringA(string(message,len).c_str());
	#endif
	  }
	}
	*/

	LOG(INFO) << "info : This should work";
	LOG(WARNING) << "warning : This should work";
	LOG(ERROR) << "error : This should work"; // 这个在日志文件和屏幕, 各打印了一份
	// LOG(GLOG_FATAL) << "This should work"; // 不要调用这个错误级别, 程序退出了

	DLOG(INFO) << "info : This should work";
	DLOG(WARNING) << "warning : This should work";
	DLOG(ERROR) << "error : This should work"; // 这个在日志文件和屏幕, 各打印了一份

	LOG_IF(INFO, (4 > 2)) << "info : 4 > 2";
	LOG_IF(WARNING, (4 < 2)) << "warning : 4 < 2";
	LOG_IF(ERROR, (4 < 2)) << "error : 4 < 2"; // 这个在日志文件和屏幕, 各打印了一份
	// LOG_IF(FATAL, (4 < 2)) << "This should work"; // 不要调用这个错误级别, 程序退出了

	// RAW_LOG(INFO, "log info");

	// close glog
	google::ShutdownGoogleLogging();

	// 通过实验, 可以看出, 如果不需要临界错误终止程序的话glog可用的日志等级有3个:
	// INFO
	// WARNING
	// ERROR
	// 
	// 发生临界错误,中止程序这活不用日志库来干, glog画蛇添足了
	// 哪能说打句临界错误的日志, 程序就挂了, 这还了得, 那内存还不大片大片的泄漏啊
	// 必须由使用glog库的作者来保证程序的健壮性, 释放资源都得使用者自己来啊.

	return EXIT_SUCCESS;
}

// 编译时,打出的工程配置样例
/*
1>--------------------------------------------------------------------------------
1>>> 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017
1>--------------------------------------------------------------------------------
1>操作系统是windows
1>IDE是vs2017
1>IDE字符集是MBCS
1>工程配置 = Debug
1>工程将要编译为Win64
1>要链接的第三方库的CRT库设置应该为/MTd
1>--------------------------------------------------------------------------------
1><< 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017
1>--------------------------------------------------------------------------------
*/
// @file my_verify_project_config.h
// @ref 
//		<<MS预定义宏的资料>> 
//		https://msdn.microsoft.com/en-us/library/b0084kay.aspx
//		https://docs.microsoft.com/en-us/cpp/preprocessor/c-cpp-preprocessor-reference?view=vs-2017
//		https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2017
//		https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2012/2kzt1wy3(v=vs.110)
//		https://github.com/prepare/Espresso/wiki/04:-Visual-Studio--MD,--MT,--LD-(Use-Run-Time-Library)

#if !defined(__MY_VERIFY_PROJECT_CONFIG_H__)
#define __MY_VERIFY_PROJECT_CONFIG_H__

// LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”
// debug版引用了release版的库,或者debug版本身使用的crt库不是MXd

// LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”
// release版引用了debug版的库,或者release版本身使用的crt库不是MX

// 一个静态库即使是debug版,如果选用了MX选项,生成的静态库还是release版

#pragma message("--------------------------------------------------------------------------------")
#pragma message(">> 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017")
#pragma message("--------------------------------------------------------------------------------")

// --------------------------------------------------------------------------------
#define OS_IS_WIN (defined _WIN32)
// --------------------------------------------------------------------------------

#if defined(OS_IS_WIN)
#pragma message("操作系统是windows")
#else 
#error 操作系统不是windows
#endif

// --------------------------------------------------------------------------------
#define VS_IDE_VER_2017 1910 // vs2017 >= 1910
#define IDE_IS_VS2017 ((defined _MSC_VER) && (_MSC_VER >= VS_IDE_VER_2017)) // if cur vs is vs2017
// --------------------------------------------------------------------------------
#if IDE_IS_VS2017
#pragma message("IDE是vs2017")
#else
#error IDE不是vs2017
#endif

// --------------------------------------------------------------------------------
#define PRJ_MBCS (defined _MBCS)
#define PRJ_UNICODE (defined _UNICODE)
// --------------------------------------------------------------------------------
#if PRJ_MBCS
#pragma message("IDE字符集是MBCS")
#elif PRJ_UNICODE
#pragma message("IDE字符集是UNICODE")
#else
#error IDE字符集未知, 只能是MBCS或UNICODE!
#endif

// --------------------------------------------------------------------------------
#define PRJ_DEBUG (!defined NDEBUG)
#define PRJ_RELEASE (defined NDEBUG)
// --------------------------------------------------------------------------------
#if PRJ_DEBUG
#pragma message("工程配置 = Debug")
#elif PRJ_RELEASE
#pragma message("工程配置 = Release")
#else
#error 工程配置未知, 只能是Debug或Release!
#endif

// --------------------------------------------------------------------------------
#define BUILD_AS_WIN32 (defined _M_IX86)
#define BUILD_AS_WIN64 (defined _M_AMD64)
// --------------------------------------------------------------------------------
#if BUILD_AS_WIN32
#pragma message("工程将要编译为Win32")
#elif BUILD_AS_WIN64
#pragma message("工程将要编译为Win64")
#else
#error 目标平台未知, 只能为Win32或Win64
#endif

// --------------------------------------------------------------------------------
// 校验_DLL是否已经设置
// --------------------------------------------------------------------------------
#if (defined _DLL)
// /MD, /MDd会设置_DLL
// /MT, /MTd 不会设置_DLL
#pragma message("_DLL被设置")
#endif

// --------------------------------------------------------------------------------
#define CRT_LIB_NEED_LINK_TO_MT (PRJ_RELEASE && (!defined _DLL) && (defined _MT)) // 多线程
#define CRT_LIB_NEED_LINK_TO_MTd (PRJ_DEBUG && (!defined _DLL) && (defined _MT)) // 多线程调试
#define CRT_LIB_NEED_LINK_TO_MD (PRJ_RELEASE && (defined _DLL) && (defined _MT)) // 多线程DLL
#define CRT_LIB_NEED_LINK_TO_MDd (PRJ_DEBUG && (defined _DLL) && (defined _MT)) // 多线程调试DLL
// --------------------------------------------------------------------------------
// 这里的判断说明本工程连接其他第三方时的库版本类型,如果不是预期的库类型, 连接就会报错
#if (CRT_LIB_NEED_LINK_TO_MT)
#pragma message("要链接的第三方库的CRT库设置应该为/MT")
#elif (CRT_LIB_NEED_LINK_TO_MTd)
#pragma message("要链接的第三方库的CRT库设置应该为/MTd")
#elif (CRT_LIB_NEED_LINK_TO_MD)
#pragma message("要链接的第三方库的CRT库设置应该为/MD")
#elif (CRT_LIB_NEED_LINK_TO_MDd)
#pragma message("要链接的第三方库的CRT库设置应该为/MDd")
#endif

// 对当前工程使用CRT库的情况进行校验, Release下只能是MT,MD; Debug下只能是MTd, MDd
#if (PRJ_DEBUG) && (!CRT_LIB_NEED_LINK_TO_MTd && !CRT_LIB_NEED_LINK_TO_MDd)
#error Debug下只能链接到/MTd或/MDd !
#elif (PRJ_RELEASE) && (!CRT_LIB_NEED_LINK_TO_MT && !CRT_LIB_NEED_LINK_TO_MD)
#error Release下只能链接到/MT或/MD !
#endif

#pragma message("--------------------------------------------------------------------------------")
#pragma message("<< 校验工程要连接的第三方库的CRT编译选项 - Visual Studio 2017")
#pragma message("--------------------------------------------------------------------------------")

#endif // #if !defined(__MY_VERIFY_PROJECT_CONFIG_H__)
// @file src\win\test_glog\my_glog_header.h

#if !defined(__MY_GLOG_HEADER_H__)
#define __MY_GLOG_HEADER_H__

#include "my_verify_project_config.h"

#define GLOG_NO_ABBREVIATED_SEVERITIES
#define GOOGLE_GLOG_DLL_DECL
#define HAVE_SNPRINTF

#include "glog/logging.h"
#include "glog/raw_logging.h"

// 静态包含glog库, 只需要编译libglog_static工程

// -----------------------------------------------------------------------------
// MBCS + Debug x86 + MDd
// -----------------------------------------------------------------------------
#if (OS_IS_WIN && PRJ_MBCS && PRJ_DEBUG && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MDd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win32\\MDd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win32\\MDd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Debug x86 + MTd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_DEBUG && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MTd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win32\\MTd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win32\\MTd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Release x86 + MD
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_RELEASE && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MD && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Release\\Win32\\MD\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Release\\Win32\\MD\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Release x86 + MT
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_RELEASE && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MT && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Release\\Win32\\MT\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Release\\Win32\\MT\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Debug x86 + MDd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_DEBUG && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MDd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win32\\MDd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win32\\MDd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Debug x86 + MTd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_DEBUG && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MTd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win32\\MTd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win32\\MTd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Release x86 + MD
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_RELEASE && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MD && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win32\\MD\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win32\\MD\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Release x86 + MT
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_RELEASE && BUILD_AS_WIN32 && CRT_LIB_NEED_LINK_TO_MT && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win32\\MT\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win32\\MT\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Debug x64 + MDd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_DEBUG && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MDd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win64\\MDd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win64\\MDd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Debug x64 + MTd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_DEBUG && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MTd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win64\\MTd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Debug\\Win64\\MTd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Release x64 + MD
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_RELEASE && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MD && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Release\\Win64\\MD\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Release\\Win64\\MD\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// MBCS + Release x64 + MT
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_MBCS && PRJ_RELEASE && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MT && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_MBCS\\Release\\Win64\\MT\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_MBCS\\Release\\Win64\\MT\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Debug x64 + MDd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_DEBUG && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MDd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win64\\MDd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win64\\MDd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Debug x64 + MTd
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_DEBUG && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MTd && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win64\\MTd\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Debug\\Win64\\MTd\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Release x64 + MD
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_RELEASE && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MD && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win64\\MD\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win64\\MD\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
// UNICODE + Release x64 + MT
// -----------------------------------------------------------------------------
#elif (OS_IS_WIN && PRJ_UNICODE && PRJ_RELEASE && BUILD_AS_WIN64 && CRT_LIB_NEED_LINK_TO_MT && IDE_IS_VS2017)
#pragma message("..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win64\\MT\\vs2017\\libglog_static.lib")
#pragma comment(lib, "..\\..\\..\\lib\\win\\_UNICODE\\Release\\Win64\\MT\\vs2017\\libglog_static.lib")

// -----------------------------------------------------------------------------
#else
#error 在这个工程配置选项中, 没有要链接的库. 请按照这个工程配置(vs2017的输出窗口信息)准备一个新库或调整测试工程的配置
#endif // #pragma comment(lib, 

#endif // #if not defined(__MY_GLOG_HEADER_H__)

编好的glog库实验目录结构

glog_usage
├─doc
│      glog-0.3.5.tar.gz
│      
├─inc
│  └─win
│      └─glog
│              logging.h
│              log_severity.h
│              raw_logging.h
│              stl_logging.h
│              vlog_is_on.h
│              
├─lib
│  ├─glog
│  │      ...
│  │      
│  └─win
│      ├─_MBCS
│      │  ├─Debug
│      │  │  ├─Win32
│      │  │  │  ├─MDd
│      │  │  │  │  └─vs2017
│      │  │  │  │          libglog_static.lib
│      │  │  │  │          
│      │  │  │  └─MTd
│      │  │  │      └─vs2017
│      │  │  │              libglog_static.lib
│      │  │  │              
│      │  │  └─Win64
│      │  │      ├─MDd
│      │  │      │  └─vs2017
│      │  │      │          libglog_static.lib
│      │  │      │          
│      │  │      └─MTd
│      │  │          └─vs2017
│      │  │                  libglog_static.lib
│      │  │                  
│      │  └─Release
│      │      ├─Win32
│      │      │  ├─MD
│      │      │  │  └─vs2017
│      │      │  │          libglog_static.lib
│      │      │  │          
│      │      │  └─MT
│      │      │      └─vs2017
│      │      │              libglog_static.lib
│      │      │              
│      │      └─Win64
│      │          ├─MD
│      │          │  └─vs2017
│      │          │          libglog_static.lib
│      │          │          
│      │          └─MT
│      │              └─vs2017
│      │                      libglog_static.lib
│      │                      
│      └─_UNICODE
│          ├─Debug
│          │  ├─Win32
│          │  │  ├─MDd
│          │  │  │  └─vs2017
│          │  │  │          libglog_static.lib
│          │  │  │          
│          │  │  └─MTd
│          │  │      └─vs2017
│          │  │              libglog_static.lib
│          │  │              
│          │  └─Win64
│          │      ├─MDd
│          │      │  └─vs2017
│          │      │          libglog_static.lib
│          │      │          
│          │      └─MTd
│          │          └─vs2017
│          │                  libglog_static.lib
│          │                  
│          └─Release
│              ├─Win32
│              │  ├─MD
│              │  │  └─vs2017
│              │  │          libglog_static.lib
│              │  │          
│              │  └─MT
│              │      └─vs2017
│              │              libglog_static.lib
│              │              
│              └─Win64
│                  ├─MD
│                  │  └─vs2017
│                  │          libglog_static.lib
│                  │          
│                  └─MT
│                      └─vs2017
│                              libglog_static.lib
│                              
└─src
    ├─linux
    │  └─test_glog
    │      │  build_all_project.sh
    │      │  main.cpp
    │      │  Makefile
    │      │  README
    │      │  
    │      └─glog-0.3.5-build-ok-on-debian7
    │          ├─include
    │          │  └─glog
    │          │          logging.h
    │          │          log_severity.h
    │          │          raw_logging.h
    │          │          stl_logging.h
    │          │          vlog_is_on.h
    │          │          
    │          ├─lib
    │          │  │  libglog.a
    │          │  │  
    │          │  ├─pkgconfig
    │          │  │      libglog.pc
    │          │  │      
    │          │  └─so
    │          │          libglog.la
    │          │          libglog.so
    │          │          libglog.so.0
    │          │          libglog.so.0.0.0
    │          │          
    │          └─share
    │              └─doc
    │                  └─glog-0.3.5
    │                          AUTHORS
    │                          ChangeLog
    │                          COPYING
    │                          designstyle.css
    │                          glog.html
    │                          INSTALL
    │                          NEWS
    │                          README
    │                          README.windows
    │                          
    └─win
        └─test_glog
                my_glog_header.h
                my_verify_project_config.h
                pch.cpp
                pch.h
                test_glog.cpp
                test_glog.sln
                test_glog.vcxproj
                test_glog.vcxproj.filters
                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值