boost :: regex与-DBOOST_DISABLE_THREADS和-finline-functions开关引起的分段故障

时间:2013-08-18 21:07:40

标签: g++ boost-regex

我正在尝试执行以下代码,该代码从字符串中提取电子邮件地址。我正在分割错误。

// A.cpp
#include <boost/algorithm/string/trim.hpp>
#include <boost/regex.hpp>
#include<iostream>

int main()
{
   std::string rcptAddress("3J1eg==?= <dummyemail@edummyemail.com>");
   boost::regex exp("\\s", boost::regex::icase|boost::regex::perl);
   std::string fmt("");
   rcptAddress = boost::regex_replace(rcptAddress, exp, fmt);
   std::cout << rcptAddress << std::endl;
   exp.assign(".*<(.*)>.*");
   fmt = "$1";
   rcptAddress = boost::regex_replace(rcptAddress, exp, fmt);
   std::cout << rcptAddress << std::endl;
   return 0;
}

我使用以下开关编译代码:

    g++ A.cpp  -g -O2 -Wall -Werror -fmessage-length=0 -fno-strict-aliasing -DBOOST_DISABLE_THREADS -finline-functions -L /root/.local/8.0.0-gcc4.1.2/lib/ -I /root/.local/8.0.0-gcc4.1.2/include/boost-1_39/ -lboost_regex-gcc41-mt-1_39

当我执行二进制文件时,我得到如下的SEGMENTATION FAULT

LD_LIBRARY_PATH=/root/.local/8.0.0-gcc4.1.2/lib/ ./a.out
3J1eg==?=<dummyemail@edummyemail.com>
Segmentation fault

重新编译二进制省略-DBOOST_DISABLE_THREADS给了我正确的结果。

g++ A.cpp  -g -O2 -Wall -Werror -fmessage-length=0 -fno-strict-aliasing -finline-functions -L /root/.local/8.0.0-gcc4.1.2/lib/ -I /root/.local/8.0.0-gcc4.1.2/include/boost-1_39/ -lboost_regex-gcc41-mt-1_39

我也试过放入-DBOOST_DISABLE_THREADS并省略-finline-functions开关。执行这个二进制文件也给了我CORRECT结果。

g++ A.cpp  -g -O2 -Wall -Werror -fmessage-length=0 -fno-strict-aliasing -DBOOST_DISABLE_THREADS -L /root/.local/8.0.0-gcc4.1.2/lib/ -I /root/.local/8.0.0-gcc4.1.2/include/boost-1_39/ -lboost_regex-gcc41-mt-1_39

我无法找出为什么同时给命令行开关-DBOOST_DISABLE_THREADS和-finline-functions(在优化级别-O3中添加)导致这里的段错误。

任何帮助都会很棒!

我在64位CentOS 5.8上使用g ++ 4.1.2。 Boost库版本是boost_1_39。

感谢。

0 个答案:

没有答案