前言
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