linux下面.so庫文件的鏈接


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM