gcc std :: regex with -fpack-struct seg fault

时间:2017-09-29 22:15:35

标签: c++ c++11 gcc

考虑以下简单的c ++程序

#include <iostream>
#include <regex>
int main(int argc, char * argv[])
{
    std::regex foobar( "[A]+");

    return 0;
}

使用-fpack-struct = 1进行编译时,会出现故障

g++-5 -std=gnu++14 ./fpack_regex.cpp -fpack-struct=1 -o a.out && a.out
Segmentation fault (core dumped)

虽然

g++-5 -std=gnu++14 ./fpack_regex.cpp -o a.out && a.out

工作正常。

为什么pack-struct = 1选项可能导致此失败?

1 个答案:

答案 0 :(得分:2)

switch -fpack-struct可能非常危险,例如。请参阅gcc文档警告:

我看到的主要问题是你的代码与标准库不是二进制兼容的(它通常不用打包的结构编译),因此调用(带有转换结构)可能会失败(实际上它们就是这样)。

建议不要使用此开关包装所有结构,但如果您需要包装结构,请仅包装您需要的结构。我还读到重新编译你使用相同fpack-struct的libstd和/或lib可能有所帮助,但无论如何这都是一个冒险的选择。

一些信息也在这里(一个关于fpack-struct的旧gcc bug),它已经过时,但可能有用:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14173