RK3568平台使用PyQt5遇到的_ZTI18QOpenGLTimeMonitor, version Qt_5问题解决

1、背景

       由于开发需要在ubuntu 20.04 RK3568平台上面使用PyQt5来运行GUI软件,整个软件的环境如下:python3.8  PyQt5 5.14.1版本

firefly@firefly:/usr/bin$ pip list
Package                Version
---------------------- --------------------
blinker                1.4
certifi                2019.11.28
chardet                3.0.4
command-not-found      0.3
cryptography           2.8
Cython                 0.29.33
dbus-python            1.2.16
distro                 1.4.0
entrypoints            0.3
httplib2               0.14.0
idna                   2.8
keyring                18.0.1
launchpadlib           1.10.13
lazr.restfulclient     0.14.2
lazr.uri               1.0.3
netifaces              0.10.4
oauthlib               3.1.0
onboard                1.4.1
pip                    20.0.2
pycairo                1.16.2
PyGObject              3.36.0
PyJWT                  1.7.1
PyQt5                  5.14.1
pyserial               3.5
python-apt             2.0.0+ubuntu0.20.4.8
PyYAML                 5.3.1
requests               2.22.0
requests-unixsocket    0.2.0
SecretStorage          2.3.1
setuptools             45.2.0
simplejson             3.16.0
sip                    4.19.21
six                    1.14.0
ssh-import-id          5.10
ubuntu-advantage-tools 27.10
urllib3                1.25.8
wadllib                1.3.3
wheel                  0.34.2

2、使用Qt遇到问题

        从PyQt5中import QtGui报错误ImportError: /usr/lib/python3/dist-packages/PyQt5/QtGui.cpython-38-aarch64-linux-gnu.so: undefined symbol: _ZTI18QOpenGLTimeMonitor, version Qt_5。

     经过百度查找到Qt官方的wiki有类似解决办法:Qt for Python/Considerations - Qt Wiki

      上面的意思就是说需要安装pyside2-es2 package, 我以为是需要安装pyside2包。

      参考下面的博文安装pyside2(2条消息) 树莓派(armv7l,arm32)buster配置Python虚拟环境、安装PyQt5、安装PySide2_树莓派pyqt5开发_DEDSEC_Roger的博客-CSDN博客

    安装PySide2的正确方式

        sudo apt install pyside2*
        sudo apt install python3-pyside2*
    相信我,这是最快捷的方法,使用pip是不行的,因为PySide系列(2,6)没有给arm平台编译wheel。另外,PySide6在树莓派的系统源里没有

       经过以上操作成功的安装了pyside2软件包,并且在python环境中可以import pyside2,但是在使用PyQt5 import QtGui时依然报上面的错误。看来上面的操作全部白费。要接着研究安装pyside2-es2 package。

3、深入研究分析解决问题

      思考了几天,上面的操作说明在RK3568平台上安装的PyQt5软件包中缺少一些动态库,可能是由当初发布的PyQt5程序(ARM64平台)编译时,缺少了相关组件导致的。那么需要使用找到PyQt5的源码进行编译安装,同时也在找到教程:特别说明以下操作全部在RK3568平台上进行。(50条消息) ARM64平台上安装PyQt5环境【包括error: Qt::ItemDataRole is not a class or namespace解决方案】_arm pyqt5_雪中奇侠的博客-CSDN博客

        RK3568平台上python是3.8,删除已经安装的pyqt5.14.1,  使用apt remove python3-pyqt即可,删除sip。

        匹配python3.8的pyQt程序是5.15.2,PyQt5版本需与SIP版本对应。这两个版本可以从以下网址下载。
SIP | 4.19.25下载(https://www.riverbankcomputing.com/static/Downloads/sip/4.19.25/sip-4.19.25.tar.gz)

PyQt5 | 5.15.2下载(https://pypi.tuna.tsinghua.edu.cn/packages/28/6c/640e3f5c734c296a7193079a86842a789edb7988dca39eab44579088a1d1/PyQt5-5.15.2.tar.gz)

3.1  安装步骤
    源码编译需要依赖qmake工具链,rk3568环境直接 sudo apt-get install qt5-default即可。
    安装编译所需的软件包

     sudo apt-get install cmake gcc g++
     pip install --upgrade pip
     pip install wheel setuptools

  3.2 源码编译SIP包

      tar zxvf sip-4.19.25.tar.gz
     cd ./sip-4.19.25
      sudo python3.8 configure.py --sip-module PyQt5.sip
     sudo make
     sudo make install

   3.3 源码编译 PyQt5

      PyQt5软件包代码很多,由于是在RK3568平台上面进行编译总计花了约12小时才完成,慢慢等吧,要不在使用电脑配置交叉编译环境。

     tar zxvf PyQt5-5.15.2.tar.gz
    cd ./PyQt5-5.15.2
     sudo python3.8 configure.py

     sudo make -j4

     sudo make install 

     PyQt5编译后的程序最后安装到了/usr/lib/python3/dist-packages/PyQt5

 3.4 测试PyQt5

        运行python3.8环境,在里面import QtGui无任何报错即可以。

4、运行PyQt应用程序

       这里测试的应用程序是pycom程序,可以参考我的文章(62条消息) 分享自己使用python+pyserial+pyQT5写的串口调试助手_pywinusb_fhqlongteng的博客-CSDN博客

       把pycom代码复制到RK3568平台上面,直接执行sudo python3.8 pycom1.3(注意要在RK3568设备上的运行,通过远程ssh不行),如下图。pycom串口软件可以愉快的在RK3568平台上使用了。

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值