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