考虑以下简单的c ++程序
#include <iostream>
#include <regex>
int main(int argc, char * argv[])
{
std::regex foobar( "[A]+");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用-fpack-struct = 1进行编译时会出现故障
g++-5 -std=gnu++14 ./fpack_regex.cpp -fpack-struct=1 -o a.out && a.out
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
而
g++-5 -std=gnu++14 ./fpack_regex.cpp -o a.out && a.out
Run Code Online (Sandbox Code Playgroud)
工作得很好.
任何线索为什么pack-struct = 1选项可能导致此失败?
开关 -fpack-struct 可能非常危险,例如。请参阅 gcc 文档警告:
我看到的主要问题是您的代码与标准库不二进制兼容(它通常不使用打包的结构进行编译),因此对其的调用(通过传输结构)可能会失败(正如它们实际上所做的那样)。
建议不要使用此开关打包所有结构,但如果您需要打包结构,请仅打包您需要的结构。我还读到,重新编译 libstd 和/或使用相同 fpack-struct 的库可能会有所帮助,但无论如何这是一个有风险的选择。
一些信息也在这里(关于 fpack-struct 的旧 gcc bug),它已经过时,但可能有用:https ://gcc.gnu.org/bugzilla/show_bug.cgi?id=14173
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |