如何解决 fatal error: bytecode stream generated with LTO version ... instead of the expected ...

问题:

使用 GCC 编译程序或库时,你收到类似这样的错误消息:

gcc_lto_error.txt
fatal error: bytecode stream generated with LTO version 5.1 instead of the expected 5.2

解决方案

此错误基本上意味着你有一些与其他二进制构建结果不兼容的二进制构建结果(主要是目标文件),但你正在尝试将它们链接在一起。LTO 部分仅意味着不兼容是由于你启用了链接时优化 - 但你不必担心,你可以像对待任何其他不兼容一样对待它。

在几乎所有情况下,错误有一个非常简单的原因:你用旧版本的 GCC 构建了项目,然后更新了 GCC 并稍后重新编译(部分地,因为并非所有文件都已更改)。在这种情况下,有一个简单的解决方案:只需清理你的构建并从头重新构建。

如果你使用 make(或 CMake),这通常很简单

make_clean_rebuild.sh
make clean # 删除旧的、不兼容的文件
make # 重新构建

对于其他构建系统,查找如何相应地清理你的构建 - 或者只删除你的 builddist 目录,如果这不会导致任何意外副作用。

在极少数情况下,构建系统配置中的问题会导致软件使用两个不同的编译器构建。如果你认为可能是这种情况(即如果清理过程没有帮助),我建议尝试查看构建系统的详细输出 – 但是,请记住,你更可能正在尝试链接一个用旧版本编译器构建的杂散目标文件。

如果你只想修复症状而忽略难以调试的不兼容性的可能性,你可以只在构建系统配置中省略 -flto 标志。这会隐藏 LTO 不兼容性,因为它完全禁用链接时优化器,但即使没有显示新的错误代码,此方法通常也不推荐。


Check out similar posts by category: GCC Errors