项目场景:
某装置主控制板。qt要求版本5.9.0以上,支持触摸功能。qt应用库,tslib也必须单独安装在usr文件夹底下。替代原来的qt4.8.6版本。
问题描述
当单独编译完qt5.9.0和 tslib,将文件打包到usr下后。运行程序发现以下bug:
原因分析:
本以为这个问题很常见,搜搜论坛帖子就能解决我这个问题。可现实结果狠狠地把脸打肿。
1.查找关键字 load the Qt platform plugin "linuxfb“ 后参阅帖子
参考经验一:QT:could not find or load the Qt platform plugin “linuxfb”
参考经验二:嵌入式Qt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “linuxfb“# 解决方案
上述两个帖子都是说明没有指定环境变量。按照上述帖子修改环境变量。将环境变量修改为
- 查找对应的库文件是否存在,发现库文件及路径完全正确。
参考经验三:
嵌入式Qt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “linuxfb“
结果还是被打脸了
-
经过几次无头绪的打脸只能求助zy技术支持。讨论后只能采用交叉替换的方法定位问题。用QT4.8.6替换编译出来的库文件发现是可以用的,而高版本则无法应用。利用strace追踪一下 qt5.9.0写的实例应用。发现如下问题:
虽然这块没有明确定位该问题。尝试往系统兼容性问题考虑。 -
再查看buildroot 制作带qt5.9.0 tslib的文件系统。发现 对应的tslib版本为1.0.0,而自身移植的tslib版本为0.9.0
-
将移植tslib 1.0.0至对应的文件地址, 问题终于解决。
总结:
移植文件系统时如果遇到“通用问题“”,并采用通用方法结果没有解决时,应考虑交叉测试(找以前能用的版本更换文件系统,内核等缩小问题范围)。实在没有解决思路时可借助现有文件系统生成工具查看版本对应关系,优先考虑插件之间的兼容性!