之前在對第三方庫升級的時候,從第三方獲得了新的.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;