在一個(gè)使用UNICODE的工程里使用log4cplus 1.0.3庫(kù),發(fā)現(xiàn)總是發(fā)生鏈接錯(cuò)誤。猜想可能是log4cplus需要在UNICODE下編譯,基于Debug和Release兩個(gè)復(fù)制了Unicode Debug/Release配置,開(kāi)始編譯…,UniRelease很容易通過(guò)了編譯,但是UniDebug卻總是發(fā)生鏈接錯(cuò)誤,但是函數(shù)肯定已經(jīng)實(shí)現(xiàn)了,將鏈接錯(cuò)誤發(fā)生的文件Appender.obj文件打開(kāi),然后比較編譯器里報(bào)出的信息
一個(gè)是
?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z
而鏈?zhǔn)狡髡也坏降姆?hào)是:
?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z
這兩個(gè)符號(hào)都很晦澀,很難讓人搞明白什么意思,放狗一搜,還真有工具叫undname.exe,在VC7.1里自帶,
Undecoration of :- "?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string
@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z"
is :- "public: virtual void __thiscall log4cplus::OnlyOnceErrorHandler::error(cl
ass std::basic_string<unsigned short,struct std::char_traits<unsigned short>,cla
ss std::allocator<unsigned short> > const &)"
Undecoration of :- "?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string
@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z"
is :- "public: virtual void __thiscall log4cplus::OnlyOnceErrorHandler::error(cl
ass std::basic_string<char,struct std::char_traits<char>,class std::allocator<ch
ar> > const &)"
一對(duì)比,就知道可能還是UNICODE的原因,仔細(xì)檢查C++預(yù)處理符號(hào)設(shè)置,發(fā)現(xiàn)好多都還是MCBS,修改,重新編譯,問(wèn)題解決。