少于 1 分钟阅读 次阅读

问题背景

运行hp-setup时,报错

error: /usr/lib/python3/dist-packages/PyQt5/QtGui.cpython-38-aarch64-linux-gnu.so: undefined symbol: _ZTI18QOpenGLTimeMonitor, version Qt_5

也就是QtGui.cpython-38-aarch64-linux-gnu.so加载时,试图调用Qt库中的符号_ZTI18QOpenGLTimeMonitor,但是没有找到这个符号。

系统下没有安装qt库,安装后在其目录下寻找符号,应该能找到。 如果qt库安装在/usr/lib/qt5/,则在该位置寻找

sudo grep -r "_ZTI18QOpenGLTimeMonitor" /usr/lib/qt5

我的qt库安装在/opt/Qt5.15.2,于是

KangHua@user:~$ sudo grep -r "_ZTI18QOpenGLTimeMonitor" /opt
匹配到二进制文件 /opt/Qt5.15.2/lib/libQt5Gui.so.5.15.2

尝试导出到变量

export LD_LIBRARY_PATH=/opt/Qt5.15.2/lib:$LD_LIBRARY_PATH

报错消失,产生了新的报错

arm_release_ver:g13p0-01eac0, rk_so_ver: 10
Cannot find EGLConfig, returning null config
Unable to find an Xil visual which matches EGL config 0
segment fault

这个报错一般是动态链接库找不到/usr/lib/aarch64-linux-gnu导致的,尝试导出

export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

结果报错又变成了

error: /usr/lib/python3/dist-packages/PyQt5/QtGui.cpython-38-aarch64-linux-gnu.so: undefined symbol: _ZTI18QOpenGLTimeMonitor, version Qt_5

查看LD_LIBRARY_PATH的值,发现是对的

KangHua@user:~$ echo $LD_LIBRARY_PATH 
/usr/lib/aarch64-linux-gnu:/opt/Qt5.15.2/lib:

可能和加载顺序有关,于是清除LD_LIBRARY_PATH

unset LD_LIBRARY_PATH

然后先执行

export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

再执行

export LD_LIBRARY_PATH=/opt/Qt5.15.2/lib:$LD_LIBRARY_PATH

程序成功运行!查看此时的LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH 
/opt/Qt5.15.2/lib:/usr/lib/aarch64-linux-gnu:

确认问题和加载的顺序有关系。

尝试解决

其实最简单的解决方式就是在.bashrc中手动去加载两个路径到LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/opt/Qt5.15.2/lib:/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

但是为了同一管理,动态链接库路径最好是放在/etc/ld.so.conf.d/这个目录的文件下,不过我在这个这些文件下尝试了去控制加载顺序,比如修改文件名等等,没有生效,hp-setup的运行会报错,最终还是直接在.bashrc中增加环境变量。

留下评论