linux下运行程序时,提示加载共享库出错:
error while loading shared libraries: libQt5SerialBus.so.5: cannot open shared object file: No such file or directory
此时需要将编译环境下的 libQt5SerialBus.so.5找到,
sudo find -name libQt5SerialBus*
找到对应文件的路径,但发现此文件其实是个链接文件
root:/# ls -l /usr/lib/libQt5SerialBus*
lrwxrwxrwx 1 root root 34 Mar 30 12:00 /usr/lib/libQt5SerialBus.so.5 -> /usr/lib/libQt5SerialBus.so.5.14.2
lrwxrwxrwx 1 root root 34 Mar 30 12:00 /usr/lib/libQt5SerialBus.so.5.14 -> /usr/lib/libQt5SerialBus.so.5.14.2
-rwxr-xr-x 1 root root 315616 Mar 30 11:47 /usr/lib/libQt5SerialBus.so.5.14.2
libQt5SerialBus.so.5 指向libQt5SerialBus.so.5.14.2 那么只需要将libQt5SerialBus.so.5.14.2 拷贝到linux的lib下,一般为/lib或/usr/lib,这个需要具体查看环境变量里添加的路径。
之后指定软链接即可。
ln -s <目标文件> <源文件>
注意,这里必须使用绝对地址,例如:
ln -s /usr/lib/libQt5SerialBus.so.5.14.2 /usr/lib/libQt5SerialBus.so.5
如果还有其他的库缺少,可以使用 ldd 查看都需要什么库 例如:
root:/#ldd TestApp
linux-vdso.so.1 (0x0000ffff812f0000)
libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x0000ffff80c20000)
libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x0000ffff805f0000)
libQt5Network.so.5 => /usr/lib/libQt5Network.so.5 (0x0000ffff80410000)
libQt5SerialPort.so.5 => /usr/lib/libQt5SerialPort.so.5 (0x0000ffff803e0000)
libQt5SerialBus.so.5 => not found
libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x0000ffff7fe50000)
libGLESv2.so.2 => /usr/lib/libGLESv2.so.2 (0x0000ffff7fe30000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffff7fe00000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffff7fbf0000)
libm.so.6 => /lib/libm.so.6 (0x0000ffff7fb40000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffff7fb10000)
libc.so.6 => /lib/libc.so.6 (0x0000ffff7f9a0000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x0000ffff7f950000)
libz.so.1 => /lib/libz.so.1 (0x0000ffff7f920000)
libdl.so.2 => /lib/libdl.so.2 (0x0000ffff7f900000)
libudev.so.1 => /lib/libudev.so.1 (0x0000ffff7f8c0000)
libicui18n.so.66 => /usr/lib/libicui18n.so.66 (0x0000ffff7f5e0000)
libicuuc.so.66 => /usr/lib/libicuuc.so.66 (0x0000ffff7f3f0000)
libpcre2-16.so.0 => /usr/lib/libpcre2-16.so.0 (0x0000ffff7f390000)
libglapi.so.0 => /usr/lib/libglapi.so.0 (0x0000ffff7f310000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff81300000)
librt.so.1 => /lib/librt.so.1 (0x0000ffff7f2f0000)
libicudata.so.66 => /usr/lib/libicudata.so.66 (0x0000ffff7d820000)
其中 not found表示缺少的库。
在最后库添加成功后,运行程序还是提示
error while loading shared libraries: libQt5SerialBus.so.5: cannot open shared object file: No such file or directory
只需要执行下面命令即可:
ldconfig
最后,程序可以运行!