最近将代码调整为release版时,碰到这样一个奇怪的错误:直接运行程序,还没有进入main入口时就宕掉。这个exe工程链接过一个公用的静态库和一个底层功能的静态库。在debug版完全没有问题。
随即开始隔离代码分析,当隔离到一个继承公用静态库时,隔离后不会宕机。这表示静态库与exe之间的链接出了一些问题。再次观察挂掉的地方显示streambuf一类的东西,这是包含在iostream里的东西,继续点击堆栈向上跟踪。结果在wcout.cpp里发现了
__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(_cpp_stdout);
所有问题迎刃而解,应该是恶心的iostream的静态变量,在多重静态库链接时的错误,导致exe启动,CRT为其分配内存时的宕机。马上屏蔽所有使用过wcout及iostream的所有代码。release版正常运行,不再宕机