Google-GLog編譯以及使用


心血來潮要去看開源代碼,看到公司的日志庫是在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的幫助, 編程之路一個人獨行確實很難走下去,每次爆出束手無策的錯誤,總是讓人很迷茫.
有些經驗並不是搜索引擎能搜的到的. 樂於助人樂於分享的大牛們,都是我的榜樣. 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM