【发布时间】:2017-07-11 14:15:18
【问题描述】:
我有一个使用 std::regex 的 C++14 应用程序。对于某些正则表达式,如果 collate facet 不可用,std::regex 构造函数将抛出 std::bad_cast(通过 std::use_facet)。
我想将我的应用程序与作为 .so 分发的第三方库链接,但我没有源代码。该库为 glibc 所需的所有内容提供了默认符号版本。它指定的版本是 2.2.5(2002 年发布)。例如,nm 告诉我:
U setlocale@@GLIBC_2.2.5
如果我在没有第三方库的情况下链接我的应用程序,则正则表达式可以工作。但是当我链接第三方库时,std::has_facet<std::collate<char>>(std::locale())返回false,所以std::regex构造函数抛出。
我的猜测是第三方库所需的非常旧的符号版本会干扰默认语言环境。我尝试在我的应用程序中更改默认语言环境,但这没有帮助。
我该如何解决这个问题?
【问题讨论】: