在我最新的 dist-upgrade 之后,我现在在登录/启动 bash 时获取 python 堆栈跟踪:
Last login: Wed Nov 28 19:33:57 2018 from x.x.x.x
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 3, in <module>
import sqlite3
File "/usr/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: /usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-i386-linux-gnu.so: undefined symbol: sqlite3_transfer_bindings
我应该注意到我正在使用 Ubuntu 自带的原装 .bashrc;我唯一改变的是为我喜欢的“ls”开关添加别名。
当我尝试运行 apt-get update 时也遇到了类似的错误:
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:4 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease
Traceback (most recent call last):
File "/usr/lib/cnf-update-db", line 8, in <module>
from CommandNotFound.db.creator import DbCreator
File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 7, in <module>
import sqlite3
File "/usr/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/usr/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: /usr/lib/python3.6/lib-dynload/_sqlite3.cpython-36m-i386-linux-gnu.so: undefined symbol: sqlite3_transfer_bindings
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code
我试过了apt-get install --reinstall command-not-found
,但无济于事。我不擅长跟踪堆栈跟踪,需要一些帮助。非常感谢。
答案1
我不是专家,但我在尝试启动 sickbeard 时遇到了相同的未定义符号,因此我以 root 身份运行以下命令:
scanelf -l -s sqlite3_transfer_bindings /lib/* /usr/* /opt/* | grep sqlite3_transfer_bindings
这给了我这个输出:
ET_DYN sqlite3_transfer_bindings /usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6
ET_DYN sqlite3_transfer_bindings /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
因此我将 sickbeard 用户的 $LD_LIBRARY_PATH 设置为 /usr/lib/x86_64-linux-gnu
我能够运行 sickbeard。
因此大概您可以运行相同的命令,然后相应地调整您的 LD_LIBRARY_PATH 值。