2017-02-21 46 views
1

我有一個使用std::regex的C++ 14應用程序。對於某些正則表達式,如果分頁方面不可用,std::regex構造函數將拋出std::bad_cast(通過std::use_facet)。與庫鏈接導致整理方面從char中丟失

我想將我的應用程序與作爲.so發佈的第三方庫鏈接,但我沒有源代碼。這個庫給出了glibc所需的所有內容的默認符號版本。它指定的版本是2.2.5(2002年發佈)。例如,納米告訴我:

U [email protected]@GLIBC_2.2.5 

如果我沒有第三方庫鏈接我的應用程序,正則表達式工作。但是當我與第三方庫鏈接時,std::has_facet<std::collate<char>>(std::locale())返回false,所以構造函數會拋出std::regex

我的猜測是,第三方庫所需的非常舊的符號版本會干擾默認的語言環境。我試圖在我的應用程序中更改默認語言環境,但這沒有幫助。

我該如何解決這個問題?

回答

1

更新到使用較新的編譯器構建的第三方庫的版本會導致問題消失。

0

我最近遇到了同樣的問題。在我的情況下,行爲發生是因爲我用不同版本的GCC來編譯庫和可執行文件。這裏是我結合GCC 4.7和GCC 5.5編譯庫和可執行的結果:

  • 庫(GCC 4.7)+可執行文件(GCC 5.5)=失敗:整理失蹤
  • 庫(GCC 4.7)+可執行文件(GCC 4.7)= 成功:整理提供
  • 庫(GCC 5.5)+可執行文件(GCC 5.5)= 成功 :整理提供

測試是基於檢查炭整理的可用性像

std::has_facet<std::collate<char>>(std::locale())