std::regex
を使用するC++ 14アプリケーションがあります。いくつかの正規表現では、コレートファセットが使用できない場合、std::regex
コンストラクタはstd::bad_cast
(std::use_facet
経由)をスローします。ライブラリとリンクすると、collateファセットが文字から欠落する
ソースがない.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
コンストラクタがスローします。
私の推測では、サードパーティのライブラリが望む非常に古いシンボルバージョンがデフォルトのロケールを妨害していると思います。私は、アプリケーション内からデフォルトのロケールを変更しようとしましたが、それは役に立ちません。
どうすればこの問題を解決できますか?