jans2002的博客

专注 专心 专业

UnDName工具,显示函数修饰名称工具

在一个使用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,修改,重新编译,问题解决。

posted on 2009-08-14 17:51 jans2002 阅读(2881) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理