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;

 

posted @ 2019-10-12 10:31  蓦然而然  阅读(1534)  评论(0编辑  收藏  举报