之前在对第三方库升级的时候,从第三方获得了新的.so文件,文件名和之前用到的完全一样。
但是在调用的时候总是找不到库,后来发现是.so文件的版本和之前的版本不对应(多个厂商不同版本)
所以可以通过以下的命令检查:
sudo readelf -d /lib64/libtesofacecv-living.so | grep libtesofacecv-living
0x000000000000000e (SONAME) Library soname: [libtesofacecv-living.so.3]
sudo readelf -d /lib64/libtesofacecv-living.so | grep libtesofacecv-living
0x000000000000000e (SONAME) Library soname: [libtesofacecv-living.so.1]
注:
linux下面是通过soname去找到实际的库文件。 查看链接的是哪个版本的库文件可以对文件进行确定
大版本不兼容,小版本向下兼容
如果你在编译的时候用的.so.3的版本,那如果第三方安装了.so.1的版本文件,那么是找不到的。所以在这种多个第三方厂商一起开发的时候,要提前确认大版本号。在每一次大版本更新要同步修改。
另外linux下面Qt代码中可能用到bash命令。可以通过类似下面的代码获得结果
QProcess process;
process.start("lshal -u computer -l");
process.waitForFinished();
QByteArray output = process.readAllStandardOutput();
QString str_output = output;
qDebug()<<output;
原文:https://www.cnblogs.com/warmSnowFY/p/11660013.html