Ошибка компоновщика при использовании VS 2015 RC, не удается найти символ, связанный с std::codecvt

Я получаю сообщение об ошибке ссылки, связанной с STL, используя Microsoft Visual Studio Community 2015 RC (версия 14.0.22823.1 D14REL)

Я связываю DLL C++ и успешно использую многие функции из STL, но не могу найти материалы, связанные с std::codecvt:

error LNK2001: unresolved external symbol "__declspec(dllimport) public: static class std::locale::id std::codecvt<char32_t,char,struct _Mbstatet>::id" (__imp_?id@?$codecvt@_UDU_Mbstatet@@@std@@2V0locale@2@A)

Ссылка на исходный код, вызывающая эту проблему:

std::wstring_convert< std::codecvt_utf8<char32_t>, char32_t > convert;

Моя генерация кода предназначена для многопоточной dll, и я проверил с помощью подробных ссылок, что MSVCPRT.lib ищется во время компоновки.

Любые идеи ?


person topspin    schedule 10.06.2015    source источник
comment
Обновление: Microsoft ответила об этом в MSDN (известная проблема): social.msdn.microsoft.com/Forums/en-US/   -  person topspin    schedule 11.06.2015


Ответы (1)


Чтобы прояснить проблему и решение: Microsoft признала, что std::codecvt не создан для char32_t в стандартной библиотеке, поставляемой с Microsoft Visual Studio 2015 RC. Обходной путь — использовать типы unsigned int или __int32:

    std::wstring_convert< std::codecvt_utf8<unsigned int>, unsigned int > convert;

or

    std::wstring_convert< std::codecvt_utf8<__int32>, __int32 > convert;

вместо

    std::wstring_convert< std::codecvt_utf8<char32_t>, char32_t > convert;
person GaspardP    schedule 05.07.2015
comment
Этот обходной путь работает, но вызывает проблему, заключающуюся в том, что ваша основная_строка также должна основываться на беззнаковом целочисленном значении. Это просто ад. - person Ident; 23.11.2015