您的位置:首页 > 其它

glog--介绍以及vs2010 vs2013 vs2015下编译

2016-11-24 19:26 381 查看
在程序员的世界里,谷歌的东西都是自带光环的。

在C++的世界里,尽管有很多成熟的、知名的log库,但我还是要跟你介绍一个google出品的log库,名为glog.

官网:

https://code.google.com/archive/p/google-glog/

github:

https://github.com/google/glog

The glog library implements application-level logging. This library provides logging APIs based on C++-style streams and various helper macros.

主要功能:

1, 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为;

2, 严重性分级,根据日志严重性分级记录日志;

3, 可有条件地记录日志信息;

4, 条件中止程序。丰富的条件判定宏,可预设程序终止条件;

5, 异常信号处理。程序异常情况,可自定义异常处理过程;

6, 支持debug功能。可只用于debug模式;

7, 自定义日志信息;

8, 线程安全日志记录方式;

9, 系统级日志记录;

10, google perror风格日志信息;

11, 精简日志字符串信息。

glog在vs2010下编译

打开google-glog.sln

编译

成功

在Debug文件夹下就有我们想要的libglog.dll libglog.lib等我们想要的文件

glog在vs2013下编译

打开google-glog.sln

编译

错误:’min’不是std的成员



解决方法:

添加头文件
#include<algorithm>


重新编译

成功

在Debug文件夹下就有我们想要的libglog.dll libglog.lib等我们想要的文件

glog在vs2015下编译

打开google-glog.sln

编译

错误1:’min’不是std的成员

解决方法:

添加头文件
#include<algorithm>


错误2:warning C4005: “va_copy”: 宏重定义

解决方法:

修改文件port.h,117行改为:

#undef va_copy
#define va_copy(dst, src)  (dst) = (src)


错误3:

error C2084: 函数“int snprintf(char *const ,const size_t,const char *const ,…)”已有主体

c:\program files (x86)\windows kits\10\include\10.0.10150.0\ucrt\stdio.h(1932): note: 参见“snprintf”的前一个定义

解决方案:

修改snprintf的名字,比如改为snprintf_glog,记得所有的都要改

错误4:

d:\glog\glog-0.3.3\src\windows\glog\logging.h(1264): error C2280: “std::basic_ios

#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <windows.h>
#include "glog/logging.h"

using namespace google;
int main(int argc, char* argv[]) {
google::InitGoogleLogging("test");
google::SetLogDestination(google::GLOG_INFO, "../Debug/logtestInfo");
google::SetLogDestination(google::GLOG_ERROR, "../Debug/logtestDebug");//不为ERROR建立日志文件
int num_cookies = 0;

google::SetStderrLogging(google::GLOG_INFO);
google::SetStderrLogging(google::GLOG_ERROR);
//google::LogToStderr();
for (int i = 0; i < 100; ++i) {
LOG(INFO) << "test google glog" << i << " cookies";
}
google::ShutdownGoogleLogging();
}


可能发生的错误:

Error 2 error LNK2005: “public: __thiscall std::_Container_base12::_Container_base12(void)” (??0_Container_base12@std@@QAE@XZ) already defined in msvcprtd.lib(MSVCP120D.dll) D:\test\test_google_glog_vs2013\test_google_glog_vs2013\main.obj test_google_glog_vs2013

这个错误,是因为在编译库glog的时候,选择的代码生成方式和现在工程的代码生成方式不一样:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: