std::regex
을 사용하는 C++ 14 응용 프로그램이 있습니다. 일부 정규식의 경우 콜레이트면을 사용할 수없는 경우 std::regex
생성자는 std::bad_cast
(std::use_facet
을 통해)을 전달합니다.라이브러리와 연결하면 콜레이트 패싯이 문자에서 누락됩니다.
내 응용 프로그램을 소스가없는 .so로 배포 된 타사 라이브러리와 연결하려고합니다. 이 라이브러리는 glibc에서 필요한 모든 것을 기본 심볼 버전으로 제공합니다. 버전이 지정하는 버전은 2.2.5입니다 (2002 년에 릴리스 됨). 예를 들어, nm은 다음과 같이 알려줍니다.
U [email protected]@GLIBC_2.2.5
제 3 자 라이브러리없이 응용 프로그램을 연결하면 정규 표현식이 작동합니다. 그러나 제 3 자 라이브러리와 연결하면 std::has_facet<std::collate<char>>(std::locale())
이 false를 반환하므로 std::regex
생성자가 throw합니다.
제 생각 엔 제 3 자 라이브러리가 원했던 아주 오래된 기호 버전이 기본 로케일을 방해하고있는 것 같습니다. 내 응용 프로그램 내에서 기본 로케일을 변경하려고 시도했지만 도움이되지 않습니다.
어떻게 해결할 수 있습니까?