NoN*_*ame 5 c++ linker name-mangling
我将XERCES函数从2.6升级到2.8时面临链接器错误
unresolved external symbol (?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QBG0@Z)
Run Code Online (Sandbox Code Playgroud)
我检查了xerces-c_2.8.lib,发现名称lib与我的.obj文件中的名称有点不同它如图所示
?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QB_W0@Z
Run Code Online (Sandbox Code Playgroud)
所以我理解链接器不会找到匹配并抛出错误.
但我无法理解为什么我的.obj文件包含不同的签名.
代码包括正确的头文件和来自仍然不正确的名称的lib.
任何帮助,将不胜感激.
Han*_*ant 14
您可以使用undname.exe实用程序来恢复原始C++声明.
?resolveEntity @ HandlerBase @ xercesc_2_8 @@ UAEPAVInputSource @ 2 @ QBG0 @ Z转换为:
virtual class xercesc_2_8::InputSource *
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
unsigned short const * const,
unsigned short const * const)
Run Code Online (Sandbox Code Playgroud)
?resolveEntity @ HandlerBase @ xercesc_2_8 @@ UAEPAVInputSource @ 2 @ QB_W0 @ Z转换为:
virtual class xercesc_2_8::InputSource *
__thiscall xercesc_2_8::HandlerBase::resolveEntity(
wchar_t const * const,
wchar_t const * const)
Run Code Online (Sandbox Code Playgroud)
注意参数类型的差异,unsigned shortvs wchar_t.由于某种原因,您的编译器无法识别wchar_t类型.那可能是因为你有一个非常古老的编译器.或者它可能是一个选项设置错误,在msvc上它是C/C++,语言,"将wchar_t视为内置类型".或者你有一个将字符串类型破解为unsigned short的宏.