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

 

1. 下载源码 

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

 

2. 编译库文件

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

          

 

3. 其他工程调用

  a. 建工程

    

  b. 拷贝头文件

    

   

  c. 放置lib文件

    

 

  d. 放置dll文件

    

  

  e.  TestDemo工程配置

  配置一:

    

  配置二:

    

  

  配置三:

    

  

  f. 运行

    

  

  g. 一脸懵逼

    

 

  h. 结论

        洗洗睡吧 !

 

 

 编译使用第二发

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

  2. 原因分析

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

 

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

    

 

     接着找到这个宏

    

    

   

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

   

  3. 纠正错误

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

    

    

    

 

  4. 学到的东西

     a. 库文件调用,产生异常的内存读取错误等等...为库文件版本问题。
            b. 通用的库文件,动态库,必须使用C++基本数据类型编译才可通用。
            c. 静态库一定需要编译器版本相同。
            d. 静态库版本错误会导致各种链接错误。
            e. 本机编译的dll文件,在调用的时候可以直接连接到源文件,比较好调试
 
    测试代码:
 1 #include <iostream>
 2 
 3 #include "glog/logging.h"
 4 
 5 int main()
 6 {
 7      google::InitGoogleLogging("log");
 8      google::SetLogDestination(google::GLOG_INFO, "./myinfo");
 9      LOG(INFO)       << "嘿嘿...";
10      LOG(WARNING)    << "呵呵...";
11      LOG(ERROR)      << "嘻嘻...";
12      LOG(FATAL)      << "哈哈...";
13      LOG(INFO)       << "嘤嘤...";
14 
15      return 0;
16 }

 

   5. 最后总结
    老感觉少写了点啥, 非常感谢同事WJ的帮助, 编程之路一个人独行确实很难走下去,每次爆出束手无策的错误,总是让人很迷茫.
有些经验并不是搜索引擎能搜的到的. 乐于助人乐于分享的大牛们,都是我的榜样.