之前在对第三方库升级的时候,从第三方获得了新的.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;
本文讲解了在Linux环境下,如何通过readelf命令检查.so库文件的版本,避免因多个第三方厂商提供不同版本的库文件导致的运行时错误。强调了在多厂商合作项目中,确认库文件大版本的重要性。

被折叠的 条评论
为什么被折叠?



