考虑以下简单的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效果很好。
知道为什么=1选项会导致此失败吗?
发布于 2017-10-02 08:36:03
开关-fpack-结构可能非常危险。见gcc相关文件警告:
我看到的主要问题是,您的代码与标准库不兼容(通常不使用打包的结构进行编译),因此对它的调用(通过传输结构)可能会失败(实际上是这样)。
建议不要使用此开关包装所有结构,但如果需要包装结构,则只打包所需的结构。我还读到,重新编译libstd和/或lib与相同的fpack-struct可能有帮助,但这是一个风险很大的选项。
这里也有一些信息(关于fpack-struct的一个老gcc错误),它已经过时了,但可能有用:bug.cgi?id=14173。
https://stackoverflow.com/questions/46497591
复制相似问题