You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用ctypes.CDLL加载共享库时遇OSError问题

解决Ubuntu 18.04下加载libMdsdcl.so时libreadline.so.6缺失的问题

问题重现

我有一个隶属于MDSplus的共享库文件libMdsdcl.so,单独存放后执行以下Python代码时触发错误:

In [1]: import ctypes as c
In [2]: from ctypes.util import find_library
In [3]: name = 'Mdsdcl'
In [4]: libname = find_library(name)
In [5]: c.CDLL(libname)

报错信息:

OSError Traceback (most recent call last)
<ipython-input-6-7c40f200b197> in <module>()
----> 1 c.CDLL(libname)
/usr/lib/python3.6/ctypes/__init__.py in __init__(self, name, mode, handle, use_errno, use_last_error)
346
347 if handle is None:
---> 348 self._handle = _dlopen(self._name, mode)
349 else:
350 self._handle = handle
OSError: libreadline.so.6: cannot open shared object file: No such file or directory

已确认Python与库均为64位,代码在其他环境可正常运行,刚升级至Ubuntu 18.04,怀疑问题与libreadline相关。

问题原因

Ubuntu 18.04默认预装的是libreadline.so.7,而libMdsdcl.so编译时依赖的是旧版本的libreadline.so.6,系统中缺少这个依赖库导致加载失败。

解决方案

1. 安装官方提供的libreadline6包

Ubuntu的软件仓库中仍保留了旧版本的libreadline6,直接通过apt安装即可:

sudo apt update
sudo apt install libreadline6

这是最稳妥的方式,不会破坏系统中其他程序的依赖。

2. (可选)手动创建软链接(仅当安装包无效时使用)

如果安装包后仍无法加载,可尝试手动创建软链接将libreadline.so.6映射到系统默认的readline链接:

sudo ln -s /usr/lib/x86_64-linux-gnu/libreadline.so.6 /usr/lib/x86_64-linux-gnu/libreadline.so

⚠️ 注意:这种方式可能会影响依赖新版本readline的程序,仅在必要时使用。

3. 验证修复

安装完成后,重新运行你的Python代码,应该可以成功加载libMdsdcl.so了。

内容的提问来源于stack exchange,提问作者Shawn Zamperini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:25:10