Ich habe eine C++ 14 Anwendung mit std::regex
. Bei einigen regulären Ausdrücken wird der std::regex
-Konstruktor std::bad_cast
(über std::use_facet
) werfen, wenn die Sortierfacette nicht verfügbar ist.Verlinkung mit Bibliothek verursacht Kollation Facette fehlen von Char
Ich möchte meine Anwendung mit einer Bibliothek von Drittanbietern verbinden, die als .so vertrieben wird, für die ich keine Quelle habe. Diese Bibliothek bietet Standard-Symbol-Versionen für alles, was sie von glibc benötigt. Die angegebene Version ist 2.2.5 (veröffentlicht im Jahr 2002). Zum Beispiel nm sagt mir:
U [email protected]@GLIBC_2.2.5
Wenn ich meine Anwendung verknüpfen, ohne die Drittanbieter-Bibliothek arbeiten reguläre Ausdrücke. Aber wenn ich mit der Drittanbieter-Bibliothek verknüpfen, gibt std::has_facet<std::collate<char>>(std::locale())
false zurück, so dass der std::regex
Konstruktor wirft.
Meine Vermutung ist, dass die sehr alten Symbolversionen, die von der Drittanbieterbibliothek gewünscht werden, das Standardgebietsschema stören. Ich habe versucht, das Standardgebietsschema in meiner Anwendung zu ändern, aber das hilft nicht.
Wie kann ich das beheben?