Я сталкиваюсь с ошибкой компоновщика для функции 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 содержит другую подпись.
код включает в себя правильные заголовочные файлы и lib от все еще неправильного имени.
Любая помощь будет оценена.
Вы можете использовать утилиту undname.exe для восстановления оригинальной декларации C ++.
?resolEntity @ 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)
?resolEntity @ 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 ++, Language, «Обрабатывать wchar_t как Встроенный тип». Или у вас есть макрос, который переводит строковый тип в unsigned short.
C ++ допускает перегрузку функций, поэтому параметры функции записываются в календаре имен. Возможно, вы пытаетесь вызвать функцию с типами параметров, отличными от ожидаемых в DLL.
Убедитесь, что ваш заголовочный файл соответствует версии вашей DLL.