[Qt]交叉编译后的App无法在开发板上运行cannot open shared object file No such file or directory

453 阅读1分钟

问题描述

如题,今天做完qt交叉编译后想要移植一个Qt的官方例程到开发板上检验是否成功,结果出现了下图的报错信息。提示error while loading shared libraries: libQt5Charts.so.5 :cannot open shared object file No such file or directory

QQ截图20230128000343.png 根据报错信息的提示,应该是缺少了某种库,经过资料查阅,得知可以通过补全缺少的库来修复。

解决方法:

1.使用lld命令查看应用程序的各项依赖库状况,此处我的应用程序名字是chartthemes.

$ldd chartthemes

QQ截图20230128000357.png

可以发现一个名为libQt5Charts.so.5的依赖显示为'not found'。结合此前报错的提示信息,可以得知应用程序依赖该动态库,而在/usr/lib/下无法找到相应的文件,因此程序报错。

2.在电脑端使用find命令搜索板子上缺失的库文件。

sudo find / -name libQt5Charts.so.5

QQ截图20230128000535.png

可以看到结果显示有两个路径下都存在名为libQt5Charts.so.5的文件。我们需要的是/opt/qt-everywhere-src-5.11.3/lib/libQt5Charts.so.5。

3.拷贝该文件至板子上的/usr/lib/目录中。完成后重新执行ldd命令查看应用程序依赖。

QQ截图20230128005243.png

可以看到缺失的依赖文件成功补全。

4.最后运行App,验收成果。

335ed3b3d4af34da1a1bd4fe3742340.jpg 移植成功。

另外,如果复制了不符合格式要求的依赖库文件到/usr/lib/目录,即使ldd命令查看依赖情况,依然会显示not found,并且尝试执行时会提示error while loading shared libraries: libQt5Charts.so.5: Wrong ELF class: ELFCLASS64。 QQ截图20230128004904.png 很明显是文件格式出了问题,该文件为64位,无法在该机器上运行。因此在补全依赖时应注意辨别出正确的文件格式。