最近需要做套接字通讯的工作,最好是有一个网络调试软件能够接受或者发送套接字,测试代码能够正常通讯。windows下有很多,但是linux下比较少,使用广泛的是下面这一款。
1、安装
首先从网盘(链接: https://pan.baidu.com/s/1XLi3ta–yALHvvBhCKTJOQ?pwd=whx7 提取码: whx7 )下载软件,或者搜索
当我们打开这个软件会发现没有任何反应,实际上是因为缺少了相关的支持库。
2、排查
直接点击图标启动并不会显示报错及原因,需要通过命令行启动。上述软件被安装在
./mNetAssist: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory
QT4的框架在20.04及以后版本的主存储库已经删除了,老软件在新系统安装运行,缺失必要的依赖库,而依赖过时了,新系统不再支持安装,导致老软件运行不起。
实际上还不止缺少这个库,每次启动遇到缺少的就报错,显然只能解决一个排查一个,实际上我们也可以通过
(base) ishyj@ishyj-XiaoXin-14-IRL8:/opt/mNetAssist$ ldd ./mNetAssist linux-vdso.so.1 (0x00007ffecafe9000) libQtGui.so.4 => not found libQtNetwork.so.4 => not found libQtCore.so.4 => not found libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efda4fbc000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007efda4d43000) libaudio.so.2 => not found libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007efda4bfe000) ......
可以看到缺少
3.1 如果本地存在so文件
那么我们可以先查一下本地是否存在:
# 打开bashrc vim ~/.bashrc # 最后面追加,path为上文找到的库的目录 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path # 退出vim后,更新,然后可以再次ldd查询这个库是否找到了 source ~/.bashrc
3.2 如何在 Ubuntu 中安装 Qt4 库
参考:如何在 Ubuntu 中安装 Qt4 库 20.04 [Ubuntu 22.04 更新]
在上面的参考中有ubuntu20和ubuntu22安装qt4库的方法,这里简要说一下ubuntu20安装qt4的步骤:
sudo add-apt-repository ppa:rock-core/qt4 sudo apt update sudo apt install PACKAGE_NAME
缺少什么so文件,就install PACKAGE_NAME就可,当然库文件和对应的PACKAGE_NAME在Packages in “Qt4 for Ubuntu 20.04”可以查到。
3.3 上法不奏效
如【linux】ubuntu20.04 运行软件 提示找不到过时的库 libQtCore.so.4、libQtGui.so.4、libpng12.so.0文中第1节所讲,可能上面3.2节方法不会有效(至少我的libqt4-network按照3.2奏效了,但是libQtGui和libQtCore是按照3.3节方法实现的)
本节的方法实际上就是将qt4中对应的库文件复制到系统中。
3.2.1 打开ubuntu主储存库
打开
该链接,依次进入
下载的deb解压后,进入解压data.tar.xz,进入data/usr/lib,在x86_64-linux-gnu下就是一些库文件。现在在lib文件夹下打开终端:
# 修改x86_64-linux-gnu下所有文件权限 sudo chmod 777 x86_64-linux-gnu/* # 移动到/usr/lib/qt4文件夹中 sudo cp -r x86_64-linux-gnu/ /usr/lib/qt4
然后可以通过
其他几个库文件都是安装上面的流程以此复制到qt4文件夹中
参考
Ubuntu20.04 tcp调试工具mNetAssist安装
【linux】ubuntu20.04 运行软件 提示找不到过时的库 libQtCore.so.4、libQtGui.so.4、libpng12.so.0