在一個使用UNICODE的工程里使用log4cplus 1.0.3庫,發(fā)現(xiàn)總是發(fā)生鏈接錯誤。猜想可能是log4cplus需要在UNICODE下編譯,基于Debug和Release兩個復(fù)制了Unicode Debug/Release配置,開始編譯…,UniRelease很容易通過了編譯,但是UniDebug卻總是發(fā)生鏈接錯誤,但是函數(shù)肯定已經(jīng)實現(xiàn)了,將鏈接錯誤發(fā)生的文件Appender.obj文件打開,然后比較編譯器里報出的信息
一個是
?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z
而鏈式器找不到的符號是:
?error@OnlyOnceErrorHandler@log4cplus@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z
這兩個符號都很晦澀,很難讓人搞明白什么意思,放狗一搜,還真有工具叫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 &)"
一對比,就知道可能還是UNICODE的原因,仔細檢查C++預(yù)處理符號設(shè)置,發(fā)現(xiàn)好多都還是MCBS,修改,重新編譯,問題解決。