我在将 XERCES 函数从 2.6 升级到 2.8 时遇到链接器错误
unresolved external symbol (?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QBG0@Z)
我检查了 xerces-c_2.8.lib,发现名称 lib 与我的 .obj 文件中的名称有点不同,如图所示
?resolveEntity@HandlerBase@xercesc_2_8@@UAEPAVInputSource@2@QB_W0@Z
所以我知道链接器不会找到匹配项并抛出错误。
但我无法理解为什么我的 .obj 文件包含不同的签名。
代码包括正确的头文件和来自仍然不正确名称的库。
如有任何帮助,我们将不胜感激。
最佳答案
您可以使用 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)
?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)
注意参数类型的差异,unsigned short
与 wchar_t
。由于某种原因,您的编译器无法识别 wchar_t 类型。那可能是因为您有一个非常旧的编译器。或者它可能是选项设置错误,在 msvc 上它是 C/C++,语言,“将 wchar_t 视为内置类型”。或者您有一个宏可以将字符串类型转换为 unsigned short。
关于c++ - 由于名称修改导致无法解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12640139/