C++11 CMake:正则表达式失败
C++11 CMake: Regex fails
我运行陷入gcc/g++ <= 4.8.X不支持RegEx的问题(我的第一反应是:什么?!)。
安装 (Ubuntu 14.04 LTS) gcc-4.9 和 g++-4.9(应该正确支持 RegEx)后,我仍然遇到同样的错误:
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
[1] 13608 abort (core dumped)
我的 CMakeLists.txt 看起来像这样(使用 Jetbrains CLion 作为 IDE):
set(CMAKE_CXX_COMPILER g++-4.9)
cmake_minimum_required(VERSION 3.1)
project(project1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(project1 ${SOURCE_FILES})
我的 代码 看起来像这样:
#include <iostream>
#include <string>
#include <fstream>
#include <regex>
using namespace std;
(...)
char encryptChar(char cinput)
{
std::string s = std::string(1, cinput);
// simplified regex (also crashes)
std::regex e = std::regex("[a-z]");
if(std::regex_match(s, e))
{
// do some stuff, if string matches conditions
}
return cinput;
}
Compiler/Linker不要抱怨什么。程序在没有正则表达式的情况下运行良好。
> g++-4.9 --version
>>> g++-4.9 (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
>>> Copyright (C) 2014 Free Software Foundation, Inc.
EDIT:使用 g++-4.9 -std=c++11 main.cpp
手动编译代码后,正则表达式有效。为什么 IDE/CMake 版本失败?
终于找到问题了:
我的 CMake 版本是 2.8-ish,所以 CMake 本身失败了,Jetbrains CLion 使用自定义 CMake(随 IDE 一起提供),它是一些 3.1-ish 但也失败了 RegEx。
我下载了 CMake 3.2.2 (newest version) and installed it (installation notes)。现在用 CMake 编译正确使用 g++-4.9 并且 RegEx 运行良好。在 CLion 中,我不得不更改设置以忽略自定义 CMake 并使用我的系统 CMake 3.2.2,现在使用 IDE 编译也正确使用 g++-4.9,RegEx 运行良好。
我运行陷入gcc/g++ <= 4.8.X不支持RegEx的问题(我的第一反应是:什么?!)。
安装 (Ubuntu 14.04 LTS) gcc-4.9 和 g++-4.9(应该正确支持 RegEx)后,我仍然遇到同样的错误:
terminate called after throwing an instance of 'std::regex_error'
what(): regex_error
[1] 13608 abort (core dumped)
我的 CMakeLists.txt 看起来像这样(使用 Jetbrains CLion 作为 IDE):
set(CMAKE_CXX_COMPILER g++-4.9)
cmake_minimum_required(VERSION 3.1)
project(project1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(project1 ${SOURCE_FILES})
我的 代码 看起来像这样:
#include <iostream>
#include <string>
#include <fstream>
#include <regex>
using namespace std;
(...)
char encryptChar(char cinput)
{
std::string s = std::string(1, cinput);
// simplified regex (also crashes)
std::regex e = std::regex("[a-z]");
if(std::regex_match(s, e))
{
// do some stuff, if string matches conditions
}
return cinput;
}
Compiler/Linker不要抱怨什么。程序在没有正则表达式的情况下运行良好。
> g++-4.9 --version
>>> g++-4.9 (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
>>> Copyright (C) 2014 Free Software Foundation, Inc.
EDIT:使用 g++-4.9 -std=c++11 main.cpp
手动编译代码后,正则表达式有效。为什么 IDE/CMake 版本失败?
终于找到问题了:
我的 CMake 版本是 2.8-ish,所以 CMake 本身失败了,Jetbrains CLion 使用自定义 CMake(随 IDE 一起提供),它是一些 3.1-ish 但也失败了 RegEx。
我下载了 CMake 3.2.2 (newest version) and installed it (installation notes)。现在用 CMake 编译正确使用 g++-4.9 并且 RegEx 运行良好。在 CLion 中,我不得不更改设置以忽略自定义 CMake 并使用我的系统 CMake 3.2.2,现在使用 IDE 编译也正确使用 g++-4.9,RegEx 运行良好。