dlopen: cannot load any more object with static TLS问题解决

项目在windows操作系统正常运行,但是在linux操作系统运行报错dlopen: cannot load any more object with static TLS,报错图如下:

错误提示字面意思无法通过线程局部存储加载更多的对象。


错误原因:主要出现在python import导入库的顺序问题,可能出现在import各种python库时,由于代码中写的import顺序导致报这个错。

如我的项目中是在import paddle时报的错,但是修改代码中import的顺序时问题无法解决,这个时候就应该考虑是库版本相关的问题,在引用的库中加载的其他库顺序问题导致,因此无法在代码中修改相关顺序,所以跟踪错误报错点core.py

令人惊喜的是有巨大收获,如图:

良心的paddle开发者在代码中给出了注意事项:当linux平台glibc版本<2.22,import导入paddle初始化时可能就会报dlopen: cannot load any more object with static TLS这个错误!解释了原因,同时给出了解决方案:

  1. 在加载core_avx.so前先预加载libgomp.so
  2. 最终解决奥义,更新glibc编译器版本高于2.22

同时下面代码判断当前系统为linux并且glibc版本低于2.23就执行libgomp.so的预加载。

查看项目部署linux系统的glibc版本:

 系统glibc版本为2.18!远达不到要求!

可以判断系统我的项目中预加载libgomp.so失败导致初始化报错。


解决方案:升级glibc版本到2.23。

 

 不再报错,问题解决!非常建议linux系统部署python相关项目时,将glibc版本更新到较新版本!同时面对报错,应该跟踪到库源码。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值