У меня есть приложение C++ 14 с использованием std::regex
. Для некоторых регулярных выражений конструктор std::regex
будет вызывать std::bad_cast
(через std::use_facet
), если фасет сопоставления недоступен.Ссылка на библиотеку вызывает сопоставление фасет, отсутствующий в char
Я хочу связать свое приложение с сторонней библиотекой, распространяемой как .so, для которой у меня нет источника. Эта библиотека предоставляет версии символов по умолчанию для всего, что нужно от glibc. Указанная версия - 2.2.5 (выпущена в 2002 году). Например, nm говорит мне:
U [email protected]@GLIBC_2.2.5
Если я связываю приложение без сторонней библиотеки, работают регулярные выражения. Но когда я связываюсь с сторонней библиотекой, std::has_facet<std::collate<char>>(std::locale())
возвращает false, поэтому конструктор std::regex
выбрасывает.
Я полагаю, что очень старые версии символов, требуемые сторонней библиотекой, мешают языку по умолчанию. Я попытался изменить локаль по умолчанию из моего приложения, но это не помогает.
Как это исправить?