当前位置: 首页 > news >正文

ImportError: Cannot load dynamic library. Did you compile LSD?

1、问题描述

>>> import pylsd2
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/data/data/wangzy-p-wangzy-p3-volume-pvc-0fee40a7-7013-49b4-8cfb-b4ab0394165b/.conda/envs/paddle/lib/python3.8/site-packages/pylsd2/__init__.py", line 9, in <module>from pylsd2.wrapper import *File "/data/data/wangzy-p-wangzy-p3-volume-pvc-0fee40a7-7013-49b4-8cfb-b4ab0394165b/.conda/envs/paddle/lib/python3.8/site-packages/pylsd2/wrapper.py", line 8, in <module>from pylsd2.bindings.fn_types import *File "/data/data/wangzy-p-wangzy-p3-volume-pvc-0fee40a7-7013-49b4-8cfb-b4ab0394165b/.conda/envs/paddle/lib/python3.8/site-packages/pylsd2/bindings/__init__.py", line 9, in <module>from pylsd2.bindings.lsd_ctypes import *File "/data/data/wangzy-p-wangzy-p3-volume-pvc-0fee40a7-7013-49b4-8cfb-b4ab0394165b/.conda/envs/paddle/lib/python3.8/site-packages/pylsd2/bindings/lsd_ctypes.py", line 60, in <module>raise ImportError('Cannot load dynamic library. Did you compile LSD?')
ImportError: Cannot load dynamic library. Did you compile LSD?

2、源码分析

查看pylsd2/bindings/lsd_ctypes.py文件,报错行lsdlib = ctypes.cdll[os.path.join(root_dir, libdir, libname)] ,debug分析,真实的报错的原因是加载报错linux/liblsd.so报错:

import ctypes
ctypes.cdll["/home/jovyan/.conda/envs/paddle/lib/python3.8/site-packages/pylsd2/lib/linux/liblsd.so"]

报错描述如下:

>>> import ctypes
>>> ctypes.cdll["/usr/local/lib/python3.7/dist-packages/pylsd2/lib/linux/liblsd.so"]
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib/python3.7/ctypes/__init__.py", line 439, in __getitem__return getattr(self, name)File "/usr/lib/python3.7/ctypes/__init__.py", line 434, in __getattr__dll = self._dlltype(name)File "/usr/lib/python3.7/ctypes/__init__.py", line 364, in __init__self._handle = _dlopen(self._name, mode)
OSError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/local/lib/python3.7/dist-packages/pylsd2/lib/linux/liblsd.so)

3、问题解决:

1、查看当前glibc版本:

ldd --version

返回以下结果:

ldd (Ubuntu GLIBC 2.27-3ubuntu1.6) 2.27

或者使用以下命令查看:

strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_

返回以下结果:

GLIBC_2.2.5
GLIBC_2.4
GLIBC_2.15
GLIBC_2.18
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_PRIVATE

2、下载glibc-2.29到指定目录:

cd /usr/local
wget -4c https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz

3、解压并创建相应文件夹:

tar -zxf glibc-2.29.tar.gz
cd glibc-2.29
mkdir build
cd build/
sudo apt-get install gawk bison -y
../configure --prefix=/usr/local --disable-sanity-checks

4、安装:

make -j18
make install

5、软链接建立:

查看当前链接情况(新终端运行):

cd /lib/x86_64-linux-gnu
ll

输出以下结果(输出结果很长,主要查看libm.so.6的对应项):

libm.so.6 --> libm-2.27.so

可以看到此时链接到的还是2.27版本;接下来要为我们刚刚安装的2.29版本创建软链接

将刚才安装的libm-2.29.so复制到/lib/x86_64-linux-gnu下(注意⚠️libm-2.29.so被安装在/usr/local/lib ;这和我们前面配置–prefix=/usr/local相对应,如果安装的位置不同,可相应的修改) ,若都是严格按照上面的步骤进行,可直接用以下命令进行复制:

cp /usr/local/lib/libm-2.29.so /lib/x86_64-linux-gnu/

添加软链接:

ln -sf libm-2.29.so libm.so.6

查验结果:

λ 6894faccd8f9 /lib/x86_64-linux-gnu ldd --version
ldd (GNU libc) 2.29
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper

至此,问题已解决

λ 6894faccd8f9 /lib/x86_64-linux-gnu python
Python 3.7.13 (default, Apr 24 2022, 01:04:09) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pylsd2

参考资料

https://zhuanlan.zhihu.com/p/549870561
特此感谢这位知乎老师的详细教程!!!

http://www.lryc.cn/news/147728.html

相关文章:

  • 音频应用编程
  • 软件测试/测试开发丨Python 学习笔记 之 链表
  • Matlab 使用经验分享(常用函数介绍;矩阵常见计算)
  • 软件工程(十七) 行为型设计模式(三)
  • 在抖音中使用语聚AI,实现自动回复用户视频评论、私信问答
  • pyqt5-快捷键QShortcut
  • 匿名函数( lambda 表达式)
  • 基于SSM的汽车维修管理系统——LW模板
  • Ceph的纠删码特性 EC(Erasure Code)代码流程
  • 盘点那些国际知名黑客(上篇)
  • 机器学习基础12-Pipeline实现自动化流程处理(基于印第安糖尿病Pima 数据集)
  • Ansible学习笔记15
  • 圆圈加数字的css
  • YOLOV5/YOLOV7/YOLOV8改进:用于低分辨率图像和小物体的新 CNN 模块SPD-Conv
  • Docker数据管理(数据卷与数据卷容器)
  • 大量TCP连接滞留TIME_WAIT、SYN_SENT、CLOSE_WAIT状态的分析
  • kotlin怎么定义类
  • 如何查看数据集下载后保存的绝对路径?
  • 使用php实现微信登录其实并不难,可以简单地分为三步进行
  • 【LeetCode-中等题】24. 两两交换链表中的节点
  • 5.10 汇编语言:汇编过程与结构
  • 【每日一题Day304】LC1267统计参与通信的服务器 | 哈希表
  • 深度解读零信任身份安全—— 全面身份化:零信任安全的基石
  • 音视频 ffmpeg命令提取音视频数据
  • vscode 配置
  • 企业数字化管控平台及信息化治理体系建设方案(附300份方案)
  • ABB PCD231B通信输入/输出模块
  • 在springboot项目中显示Services面板的方法
  • spring之AOP简介
  • ros::init用途用法