项目在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版本更新到较新版本!同时面对报错,应该跟踪到库源码。

 

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐