首页 > 其他分享 >dpdk报错/lib64/libibverbs.so.1: version `IBVERBS_1.8' not found (required by /usr/local/lib64/dpd

dpdk报错/lib64/libibverbs.so.1: version `IBVERBS_1.8' not found (required by /usr/local/lib64/dpd

时间:2024-04-15 18:12:59浏览次数:22  
标签:libibverbs so.1 报错 lib64 IBVERBS dpdk

问题出现的原因:启动的程序需要dpdk,因为不是root用户,调用dodk的程序时报错:

EAL: Error creating '/run/user/0/dpdk': Permission denied
EAL: Cannot create runtime directory
一开始解决的方法是在绑定网卡的时候,/usr/local/sbin/bindnet.sh -vb  ,绑定的时候给与普通用户使用的权限,普通用户也能使用。

但是后面发现过了个周末,又出现上面的报错,想着来回改麻烦,就想着直接解决权限问题,网上查找了多个后,按照一个看着最类似的方式:

1、将用户添加到dpdk组中,然后重新登录:
    sudo usermod -a -G dpdk <username>
2、修改目录权限:
    sudo chmod 777 /run/user/0/dpdk
3、将DPDK运行目录更改为用户有权限的目录:
    export XDG_RUNTIME_DIR=/tmp/dpdk

然后普通用户启动不了,切到root账户也不行了,当时想到的最粗暴的方法:重装dpdk(公司给的有安装包,能脚本一键安装),重装后问题来了

报错: 

/lib64/libibverbs.so.1: version `IBVERBS_1.8' not found (required by /usr/local/lib64/dpdk/pmds-21.0/librte_net_mlx4.so.21.0)

一开始我认为是我前面操作时,自定义的环境变量,使dpdk程序无法识别正确的路径从而报错,但删除自定义的环境变量后,还是报错。

看报错,一开始我的理解,是把这个报错分为三部分:

  (1) libibverbs.so.1 

  (2) BVERBS_1.8

  (3) ibrte_net_mlx4.so.21.0

libibverbs.so.1  与 ibrte_net_mlx4.so.21.0 直接用ll 路径能找到,我就理所当然的认为这两个部分没有问题,是 BVERBS_1.8 的问题,加上还不熟悉这个东西,就直接上网搜 BVERBS_1.8,看到底是哪里出问题 。因为是dpdk更底层的东西,根本不知道如何找资源,更别说下载了,一直找不到解决的头绪,直到第二天找到了一个部署nginx报错的例子,看了人家的解释,才发现是我一开始理解的方法就不对。上面的报错不是我理解的三部分,而是两部分

  (1)libibverbs.so.1: version `IBVERBS_1.8' 

  (2)librte_net_mlx4.so.21.0

libibverbs.so.1: version `IBVERBS_1.8'  应该理解为:libibverbs.so.1 库中的某个版本: IBVERBS_1.8 ,不是我一开始理解的 三个是独立分开,依次调用的关系。
去解决:

objdump -tT  libibverbs.so.1  |grep IBVERBS_1.8  ,库里没IBVERBS_1.8 这个版本,而且发现 libibverbs.so.1 是个软链接,找到原始文件 libibverbs.so.1.8.28.0

,发现其大小竟然是0,当时真想给自己两个嘴巴子,这么简单的一个问题都没发现。网上找不到资源,就去其他机器上copy了不同的版本过来,建立软链接链,

启动后,又报错

EAL: /lib64/libibverbs.so.1: version `IBVERBS_PRIVATE_22' not found (required by /lib64/libmlx4.so.1)

按上面说的分为两部分分析,先检查IBVERBS_PRIVATE_22,发现库里带的是IBVERBS_PRIVATE_25,这时我也不确定是哪里出问题了,就到copy的机器上

做个对比,发现其机器上也是IBVERBS_PRIVATE_25 ,就去检查 libmlx4.so.1,发现他们用的库版本不一致。我想了下,意识到是我虽然更换

了libibverbs.so.1.8.28.0库,但是其它依赖调用的库:libmlx4.so.1 还是上个版本的 ,和这版本不匹配从而造成的报错,替换后的效果

libmlx4.so.1 -> libmlx4.so.1.0.28.0
libmlx4.so.1.0.22.4_old
ibmlx4.so.1.0.28.0

再启动脚本,又报错

EAL: /lib64/libmlx5.so.1: version `MLX5_1.12' not found (required by /usr/local/lib64/dpdk/pmds-21.0/librte_common_mlx5.so.21.0)

不用想,估计和上面报错应该是一致,也替换了,再启动程序,root账户ok,切换到普通用户,启动,和最开始报错一样。但是改了上面几个报错后,在看这个时心态就不一样,不像一开始那样急躁的不去先检查一下,而是直接去网上找现成的。

先在普通用户下,查看: ll /run/user/0 ,没有dpdk这个目录,我就进入到  /run/user/0 下,ll 后,发先0这个目录是root用户创建的,且权限只有:读,然后直接更改为:777,再启动脚本,又报错:

EAL: failed to open directory /usr/local/lib64/dpdk/pmds-21.0: Permission denied
EAL: Cannot init plugin directory /usr/local/lib64/dpdk/pmds-21.0

是启动dpdk目录没权限,直接把权限从:700 改为:777,再去启动,又报错:

 failed. msg: Permission denied ignored

想到了前面看到的一个解释:

$XDG_RUNTIME_DIR
$XDG_RUNTIME_DIR 定义了应存储用户特定的非重要性运行时文件和一些其他文件对象。
使用场景:套接字 (socket)、命名管道 (named pipes) 等。该目录必须由用户拥有,并且该用户必须是唯一具有读写访问权限的。目录的 Unix 访问模式必须是 0700。
应该是给的权限太大了,其他用户不该有 写操作,就该为755,在执行,ok,到此,程序可以正常启动。只能说一开始的方法,缺少几步关键的步骤。

推荐一个链接,就我参考的那篇文章,人家的结题思路非常nice

https://blog.csdn.net/zyxinside/article/details/125235862

标签:libibverbs,so.1,报错,lib64,IBVERBS,dpdk
From: https://www.cnblogs.com/z977690557/p/18071243

相关文章

  • electron启动报错The futex facility returned an unexpected error code
    -启动electron时报错(ubuntu-22.04) githubissue地址:https://github.com/electron/electron/issues/24211?spm=a2c6h.12873639.article-detail.9.320d60da4kg611需要在启动命令前加环境变量  DISPLAY=:0start:"cross-envDISPLAY=:0vue-cli-serviceelectron:serve"......
  • Visual Studio 工具箱报错:未能加载工具箱项,将从项目中移除(转)
    未能加载工具箱项1篇文章0订阅订阅专栏我是在使用AnyCpu模式下,出现上面的错误,因为我目标平台设置的是X64解决办法:只需要把【项目名称右键->属性->生成->目标平台】设置成AnyCpu,一开始我设置的X64,因为有些第三方Nuget包不允许在X86下运行,所以为了使程序在X64下运行,把目标平台......
  • Fluent Meshing:导入几何报错(Error in CAD Import)
    问题具体描述在使用Fluent自带的划分网格工具时,需要导入几何,在spaceclaim中做好几何处理以后,导入几何却报错:ErrorinCADImport解决方案采用下面的该方法逐一排除路径是否含有中文或者不合规字符等以管理员身份启动软件尝试几何文件和划网格软件版本是否一致Fluent是否安......
  • MindSpore运行报错RuntimeError: Unsupported device target GPU解决方案
    问题背景在运行MindSpore程序时,设置device_target为GPU,结果运行时报错:RuntimeError:UnsupporteddevicetargetGPU.Thisprocessonlysupportsoneofthe['CPU'].PleasecheckwhethertheGPUenvironmentisinstalledandconfiguredcorrectly,andcheckwhethercu......
  • nginx报错:bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a soc
    问题:1.nginx启动失败2.在logs/error.log文件下,出现报错信息:bind()to0.0.0.0:80failed(10013:Anattemptwasmadetoaccessasocketinawayforbiddenbyitsaccesspermissions) 目录:1、cmd输入命令netstat-aon|findstr"80"2.、查看80端口7532对应的任务3、......
  • vscode使用npm安装依赖报错
    1.报错信息npmERR!codeEPERMnpmERR!syscallopennpmERR!pathC:\Node\node_cache_cacache\index-v5\4b\d5\ac02d8eac51f5c368b18a948d14b7ba882d43e6f4cafddbf9dda740d2afanpmERR!errno-4048npmERR!Error:EPERM:operationnotpermitted,open'C:......
  • SpringBoot+Redis启动报错Unsatisfied dependency expressed through method 'stringR
    SpringBoot+Redis启动报错Applicationrunfailedorg.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'redisTool':Unsatisfieddependencyexpressedthroughfield'stringRedisTemplate';nestedexcep......
  • "(UE4Editor.exe中)处有未经处理的异常:0xC0000005:读取位置0x0000000000000000时发生
    报错情况:使用ue4.27Slate编写Widget时想通过获取Worl(通过本地PlayerController获取)来实现“设置定时任务为在音乐结束后自动触发函数”的功能ps:定时执行函数代码 解决方法:使用GWorld替换掉通过第0号PlayerController获取世界 原因分析:(由于本人校验较少,暂做以下估计)在......
  • Redis报错:CROSSSLOT Keys in request don't hash to the same slot的解决方案
    最近,项目上线的时候,出现了一个Redis的报错:CROSSSLOTKeysinrequestdon'thashtothesameslot,这个在内网环境下无法复现,因为正式环境的Redis是cluster集群模式,而我们内网环境是单机模式。(后面我在内网也部署了一个Redis集群,具体见我这一篇文章《使用Docker搭建RedisCluste......
  • 解决编译redis报错zmalloc.h:50:10: fatal error: jemalloc/jemalloc.h: No such file
    编译redis时报错:zmalloc.h:50:10:fatalerror:jemalloc/jemalloc.h:Nosuchfileordirectory,执行:#sudomakeMALLOC=libc1即可成功 需要先运行“makedistclean”,它设置删除所有早期的编译文件,然后运行“make”,这样就得到了redis服务器程序的新编译。执行后成功编......