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