c++ - gcc 7.3 LTO(-flto)在退出()/静态变量时崩溃(SIGSEGV)?
问题描述
我有一个需要维护的旧应用程序。数千行代码。
当我切换到 gcc 7.3 编译器并启用 -flto 应用程序开始崩溃或退出时:
(gdb) bt
#0 0x00000000 in ?? ()
#1 0x1ee0c6b0 in ?? () from /lib/libc.so.6
#2 0x1ee0c840 in exit () from /lib/libc.so.6
#3 0x1edf0d5c in ?? () from /lib/libc.so.6
#4 0x1edf0f10 in __libc_start_main () from /lib/libc.so.6
#5 0x00000000 in ?? ()
当我删除 -flto 选项应用程序停止崩溃。
我已经追踪到一个函数体中未使用的静态变量导致了问题:
static std::vector<C_Param*> vpParam;
当我在所有应用程序中删除“静态”或删除变量时,应用程序停止崩溃。
这对我来说很奇怪,因为该变量没有被使用并且只发生在 -flto 选项中。
可能的主要原因是什么?
解决方案
推荐阅读
- bash - 在 bash unix 中使用 sqlplus 的动态数组循环
- android - OpenGL ES中雾坐标的计算
- javascript - onUploadProgress 与 axios 仅显示 isTrusted: true
- docker - Windows 容器是否支持多节点 Swarm
- amazon-web-services - 现有密钥对不在 AWS Cloudflormation 中
- assembly - uop-cache 的缺失粒度
- javascript - 将动态创建的复选框输入转换为 Switchery 样式的开关
- java - 为什么 for readelements() 来回循环不打印出来?
- javascript - Firestore onSnapshot 规则在删除文档时抛出错误
- google-app-engine - Google Cloud Serverless VPC 连接器不适用于 App Engine