You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在Yocto Morty 2.2为Nitrogen6SX降级Qt5.7至Qt5.4时编译报错

解决Yocto Morty分支降级Qt5到5.4时qtbase编译失败的问题

我之前在Nitrogen6SX这类i.MX6平台的Yocto Morty分支上,尝试把Qt从5.7降级到5.4时遇到过一模一样的kms插件编译错误——本质是新版本Yocto的底层图形依赖库和旧版Qt的API要求不匹配导致的,下面是我验证有效的解决步骤:

1. 先明确错误根源

你看到的编译失败出在Qt的kms平台插件环节,这是因为Morty分支默认配套的libdrmmesa等图形库版本是针对Qt5.7优化的,而Qt5.4对这些库的版本、API有更旧的要求,只改Qt版本但不同步调整依赖库就会触发兼容性错误。

2. 同步适配Qt5.4的依赖版本

在你的项目local.conf文件里添加以下配置,强制指定适配Qt5.4的依赖库版本:

# 指定适配Qt5.4的libdrm版本
PREFERRED_VERSION_libdrm = "2.4.67"
# 指定适配Qt5.4的mesa版本
PREFERRED_VERSION_mesa = "11.2.2"
# 强制所有Qt组件使用5.4版本
PREFERRED_VERSION_qtbase = "5.4.2"
PREFERRED_VERSION_qtdeclarative = "5.4.2"
# 其他Qt组件(如qtmultimedia、qtquickcontrols)按需添加版本指定

3. 调整qtbase的编译配置

如果你的场景可以用linuxfb替代kms(从日志看linuxfb插件已经编译成功),可以直接关闭kms支持绕过错误:
找到meta-qt5/recipes-qt/qt5/qtbase_git.bb文件,修改EXTRA_OECONF参数:

EXTRA_OECONF += " \
    -no-kms \
    -linuxfb \
    -no-eglfs \
    -no-opengl \
"

如果必须使用kms,需要从支持Qt5.4的Yocto分支(比如Jethro)移植qtbase的kms插件补丁到你的Morty分支,因为Qt5.4的kms代码逻辑和Morty默认的补丁不兼容。

4. 清理编译缓存重新编译

先清理qtbase的旧编译状态,避免缓存残留干扰:

bitbake -c cleansstate qtbase

然后重新编译qtbase:

bitbake qtbase

5. 检查qt5-git.inc的完整配置

你只修改了版本名称,还要确保两个关键配置正确:

  • SRCREV字段是Qt5.4.2对应的正确Git提交哈希(可以去Qt官方仓库找v5.4.2标签对应的commit),而不是原来Qt5.7的哈希值
  • PV字段设置为5.4.2,避免自动生成带gitAUTOINC的版本号,防止版本混乱

额外稳妥建议

Morty分支和Qt5.4的版本跨度较大,直接改版本号很容易踩隐藏坑。最省心的方式是从Yocto Jethro分支(该分支默认配套Qt5.4)把整个meta-qt5层复制到你的项目中,这样所有补丁、依赖配置都是完全适配Qt5.4的,能避免大部分兼容性问题。

内容的提问来源于stack exchange,提问作者user9019088

火山引擎 最新活动