RHEL7环境下Python3.11导入sqlite3模块出现未定义符号sqlite3_trace_v2错误的排查求助
RHEL7环境下Python3.11导入sqlite3模块出现未定义符号sqlite3_trace_v2错误的排查求助
各位好,我遇到了一个Python导入sqlite3模块的问题,想请大家帮忙排查下:
我用的是RHEL 7系统,上面的Python版本是3.11.9——这套环境不是我搭建的,基础Python安装也不是我做的,而且我没法运行yum命令,所以对系统配置的细节了解得很有限。
当我尝试在Python里导入sqlite3模块时,出现了如下错误:
ImportError: /some/path/to/python/lib/python3.11/lib-dynload/_sqlite3.cpython-311-x86_64-linux-gnu.so: undefined symbol: sqlite3_trace_v2
按照服务器管理员的指导,我用nm命令检查了这个.so文件,结果确实没找到sqlite3_trace_v2符号,只看到了:
U sqlite3_trace
我查看了系统里的SQLite相关文件:
/usr/lib64/libsqlite3.so.0.8.6,修改日期是2020年1月13日/usr/bin/sqlite,修改日期同样是2020年1月13日
运行sqlite二进制文件显示版本是3.31.1,从日期来看这两个文件应该对应同一个版本。而Python 3.11对SQLite的版本要求是3.7.15,3.31.1明明已经满足了这个要求。另外,我发现/usr/include目录下既没有sqlite3.h也没有sqlite3ext.h。
我现在有点搞不清状况:根据我有限的编译知识,未定义符号通常意味着编译这个lib-dynload里的_sqlite3模块时,依赖的库缺少对应的符号,但版本号明明达标了,不知道为什么会出现这种情况。
最后我还看到过一个案例,说环境变量会导致编译结果出错——安装Python的用户设置了LD_LIBRARY_PATH,里面有很多我不熟悉的路径,不知道我的问题会不会和这个有关?
我对共享库和编译相关的知识了解得比较浅,希望能得到大家的指点,谢谢!
备注:内容来源于stack exchange,提问作者Fascinating_device_000




