在一个使用UNICODE的工程里使用log4cplus 1.0.3库,发现总是发生链接错误。猜想可能是log4cplus需要在UNICODE下编译,基于Debug和Release两个复制了Unicode Debug/Release配置,开始编译…,UniRelease很容易通过了编译,但是UniDebug却总是发生链接错误,但是函数肯定已经实现了,将链接错误发生的文件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++预处理符号设置,发现好多都还是MCBS,修改,重新编译,问题解决。