【发布时间】:2017-09-29 22:15:35
【问题描述】:
考虑以下简单的 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 选项可能导致此失败吗?
【问题讨论】:
-
GCC 在历史上与
<regex>有很多问题。您的 GCC 的确切版本是什么? -
鉴于
g++-5,这可能是 gcc 5.something。 gcc 7 也会崩溃。使用此选项更改所有类和结构的对齐方式,这并不奇怪,给定来自头文件中模板的一堆代码,它最终的编译方式与位于使用默认选项编译的库中的另一组代码不同。我们最终在这里遇到的是无法沟通...... -
<regex>是仅标头库吗?还是它还涉及标准库中的一些目标文件?在后一种情况下,如果您更改此类选项时失败,那一点也不奇怪。 -
@neilbutterworth g++-5 (SUSE Linux) 5.3.1 20160301 [gcc-5-branch revision 233849] 尽管 Sam 指出它在其他版本中
-
也与 cygwin 崩溃:g++ (GCC) 5.4.0