如何知道libstdc++是否支持std::regex

How to know if libstdc++ support std::regex

本文关键字:std regex 支持 是否 何知道 libstdc++      更新时间:2023-10-16

我有一个使用std::regex的应用程序,它在我的计算机上构建并运行良好。然而,在ubuntu 14.04上,它构建了但不起作用,因为std::regex没有在旧的libstdc++上实现。

我想在代码中#ifdef一些行来解决这个问题,但似乎可以找到一种可靠的方法来确定libstdc++是否支持它。

我正在使用cmake,所以如果我能够获得该库的版本(/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19->6019),我也会很高兴。

您可以编写一个简单的测试来检查它是否有效。首先是CMake部分:

include(CMakePushCheckState)
include(CheckCXXSourceRuns)
cmake_push_check_state()
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
check_cxx_source_runs("
      #include <regex>
      int main() {
        return std::regex_match("StackOverflow", std::regex("(stack)(.*)"));
      }
" HAVE_CXX_11_REGEX)
cmake_pop_check_state()

然后,您必须将变量have_CX_11_REGEX包含在config.h中。然后,您可以使用#ifdef HAVE_CXX_11_REGEX对此进行测试。