Мы просто «портировали» наше приложение на Unicode, и у меня возникли трудности с некоторыми ссылками.
Интересно, может быть, я пропускаю какой-то другой флаг, потому что я не уверен, что означает искажение названия ниже:
Это ошибка ссылки, которую я получаю
Ошибка 31, ошибка LNK2019: неразрешенный внешний символ "public: class
boost :: shared_ptr __thiscall
ResourceManager :: GetImage (class std::basic_string<unsigned
short,struct std::char_traits<unsigned short>,class
std::allocator<unsigned short>
> const &, bool) "
(? GetImage @ ResourceManager @@ QAE? AV? $ Shared_ptr @ VPngImage @@@ увеличить @@ ABV? $ Basic_string @ GU? $ Char_traits @ G @ станд @@ V? $ Распределитель @ G @ 2 @@ станд @@ _ N @Z)
упоминается в функции "public: long __thiscall ATL :: CAxWindowT :: QueryHost (struct _GUID const &, void * *)"
(? QueryHost @? $ CAxWindowT @ VCWindow @ ATL @@@ ATL @@ QAEJABU_GUID @@ PAPAX @ Z) wndGroupSearch.obj
Метод в коде. Объявлено так:
boost::shared_ptr<PngImage> GetImage(const tstring& name, bool bLocalizedOnly = false );
Когда я запускаю dumpbin в lib, который не связывается, я получаю следующее:
public: class boost::shared_ptr<class PngImage> __thiscall ResourceManager::GetImage(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,bool))
?GetImage@ResourceManager@@QAE?AV?$shared_ptr@VPngImage@@@boost@@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@_N@Z
Когда я выкидываю версию Debug (которая правильно связывает), я получаю следующее в дампбине для lib
public: class boost::shared_ptr<class PngImage> __thiscall ResourceManager::GetImage(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,bool)" (?GetImage@ResourceManager@@QAE?AV?$shared_ptr@VPngImage@@@boost@@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@_N@Z)
?GetImage@ResourceManager@@QAE?AV?$shared_ptr@VPngImage@@@boost@@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@_N@Z (public: class boost::shared_ptr<class PngImage> __thiscall ResourceManager::GetImage(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,bool))
Есть ли какая-то проблема с бустом или, возможно, отсутствует флаг компиляции или ссылки, который мне не хватает, чтобы это исправить?
Это работает в нашей отладочной Unicode-сборке, но не в Release-сборке. Я еще не выяснил, почему искаженные имена выглядят по-разному:
? $ Basic_string @ GU? $ Char_traits
против
? $ Basic_string @ _WU? $ Char_traits
и более дружелюбные имена:
ResourceManager::GetImage(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,bool)
против
ResourceManager::GetImage(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &,bool))
wchar_t и GU против неподписанного короткого _WU
Есть предложения?