最近將代碼調整為release版時,碰到這樣一個奇怪的錯誤:直接運行程序,還沒有進入main入口時就宕掉。這個exe工程鏈接過一個公用的靜態庫和一個底層功能的靜態庫。在debug版完全沒有問題。
隨即開始隔離代碼分析,當隔離到一個繼承公用靜態庫時,隔離后不會宕機。這表示靜態庫與exe之間的鏈接出了一些問題。再次觀察掛掉的地方顯示streambuf一類的東西,這是包含在iostream里的東西,繼續點擊堆棧向上跟蹤。結果在wcout.cpp里發現了
__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(_cpp_stdout);
所有問題迎刃而解,應該是惡心的iostream的靜態變量,在多重靜態庫鏈接時的錯誤,導致exe啟動,CRT為其分配內存時的宕機。馬上屏蔽所有使用過wcout及iostream的所有代碼。release版正常運行,不再宕機