You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu18.04下Yocto编译QtWebEngine5.15.2报std::basic_streambuf未定义引用错误

Ubuntu 18.04 下 Yocto 编译 QtWebEngine 5.15.2 链接错误解决方案

错误根因

该报错是Ubuntu 18.04原生主机GCC版本(默认7.5)与QtWebEngine 5.15.2内置V8引擎的代码C标准库兼容性问题:V8的torque工具编译时启用了32位模式,其内部NullStreambuf类继承的std::basic_streambuf虚函数签名与主机libstdc提供的实现不匹配,导致链接阶段出现未定义引用。

解决方案

方案1:升级主机GCC版本(优先推荐)

升级主机GCC到9以上版本,解决libstdc++兼容问题:

  1. 安装GCC 9工具链:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install gcc-9 g++-9
  1. 配置系统默认GCC/G++为9版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90
  1. 完全删除Yocto之前的编译缓存目录(build/tmp),重新启动编译即可。

方案2:修改QtWebEngine编译配置(无需修改主机环境)

在Yocto层的qtwebengine_%.bbappend文件中添加如下配置,跳过V8快照的宿主工具编译环节:

EXTRA_QMAKEVARS_PRE += "CONFIG+=webengine-no-build-v8-snapshot"

修改后清理编译缓存重新编译即可,该方案不会影响最终生成的QtWebEngine功能。

方案3:升级Yocto版本

升级Yocto到Dunfell 3.1及以上版本,高版本Yocto已经集成了QtWebEngine 5.15.2的适配补丁,自带的宿主工具链可以直接兼容编译。

注意事项

  • 任何配置修改后都需要彻底清理旧的编译缓存,否则旧的编译产物会继续触发相同报错
  • 若开启了Yocto的共享状态缓存(SSTATE_CACHE),也需要清理对应QtWebEngine相关的缓存条目

内容的提问来源于stack exchange,提问作者md.jamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:15:05