首页 > 解决方案 > 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 选项中。

可能的主要原因是什么?

标签: c++gcclto

解决方案


推荐阅读