Google-GLog编译以及使用

时间:2024-09-25 12:04:26

心血来潮要去看开源代码,看到公司的日志库是在google-glog开源库上二次封装的,那就先撸glog吧.

1. 下载源码 

  一条命令取源码:git clone github.com/google/glog

2. 编译库文件

  双击打开,右键编译,看到succeed,心情还不错~

Google-GLog编译以及使用

3. 其他工程调用

  a. 建工程

    Google-GLog编译以及使用

  b. 拷贝头文件

    Google-GLog编译以及使用

   

  c. 放置lib文件

    Google-GLog编译以及使用

  d. 放置dll文件

    Google-GLog编译以及使用

  

  e.  TestDemo工程配置

  配置一:

    Google-GLog编译以及使用

  配置二:

    Google-GLog编译以及使用

  

  配置三:

    Google-GLog编译以及使用

  

  f. 运行

    Google-GLog编译以及使用

  

  g. 一脸懵逼

    Google-GLog编译以及使用

  h. 结论

       洗洗睡吧 !

 编译使用第二发

  1. 痛定思痛,痛何如哉?

  2. 原因分析

    简单的调用都出问题,不爽,看源码。

    我的Demo调用了这个宏来输出

    Google-GLog编译以及使用

    接着找到这个宏

    Google-GLog编译以及使用

    

  

    调用了非C++基础库文件。问题找到。
    原因在于,dll库文件在编译的时候,调用了非基础库的类。这个类在每个不同的编译器上实现可能都不同,因此,用VS2008编译,用VS2013调用会出问题, 问题表现为指针错误。
    并且静态库一定要编译器版本号对应。
    解决方案也很简单,VS2013编译库文件---->VS2013调用 VS2008编译库文件---->VS2008调用

  

  3. 纠正错误

    改用VS2013编译的库,问题解决

    Google-GLog编译以及使用

    

    Google-GLog编译以及使用

  4. 学到的东西

     a. 库文件调用,产生异常的内存读取错误等等...为库文件版本问题。
            b. 通用的库文件,动态库,必须使用C++基本数据类型编译才可通用。
            c. 静态库一定需要编译器版本相同。
            d. 静态库版本错误会导致各种链接错误。
            e. 本机编译的dll文件,在调用的时候可以直接连接到源文件,比较好调试
    测试代码:
 #include <iostream>

 #include "glog/logging.h"

 int main()
{
google::InitGoogleLogging("log");
google::SetLogDestination(google::GLOG_INFO, "./myinfo");
LOG(INFO) << "嘿嘿...";
LOG(WARNING) << "呵呵...";
LOG(ERROR) << "嘻嘻...";
LOG(FATAL) << "哈哈...";
LOG(INFO) << "嘤嘤..."; return ;
}
   5. 最后总结
    老感觉少写了点啥, 非常感谢同事WJ的帮助, 编程之路一个人独行确实很难走下去,每次爆出束手无策的错误,总是让人很迷茫.
有些经验并不是搜索引擎能搜的到的. 乐于助人乐于分享的大牛们,都是我的榜样.