刚刚升级到 18.04,当我运行时sudo apt update
,它抱怨:
/usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so: symbol gnutls_pkcs11_privkey_init version GNUTLS_3_4 not defined in file libgnutls.so.30 with link time reference Failed to load module: /usr/lib/x86_64-linux-gnu/gio/modules/libgiognutls.so
旧信息:
运行gio version
给出:2.53.6
运行gntls-cli -v
给出:gnutls-cli 3.5.8
apt-get
据我所知,这意味着GNUTLS version 3.4
当我有3.5.8
.
任何关于如何进行的想法将不胜感激。我的怀疑是,升级发行版或尝试从错误的存储库更新时,它可能没有正确解决依赖关系。
有趣的是,我在打开 Octave ( https://www.gnu.org/software/octave/ ) 时遇到了同样的错误。
添加以回应评论:
apt-cache policy libgnutls30
说:
libgnutls30:
Installed: 3.5.18-1ubuntu1
Candidate: 3.5.18-1ubuntu1
Version table:
*** 3.5.18-1ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
100 /var/lib/dpkg/status
/usr/lib/x86_64-linux-gnu/libgnutls.so.30
指向libgnutls.so.30.14.10
我
nm -D /usr/lib/x86_64-linux-gnu/libgnutls.so.30 | grep GNUTLS_3
印刷0000000000000000 A GNUTLS_3_4
这是我解决问题的方法。请注意,最后似乎有点危险,因此在另一个答案或评论中采用更安全的方法将不胜感激。
我发现
libgnutls.so.30
我的系统上有两个版本,一个/usr/lib/x86_64-linux-gnu
在/usr/local/lib/
.在这些文件上运行
nm -gC
和readelf -sW
withgrep
表明第一个确实包含有问题的符号,而第二个不包含。这使我相信gnutls
在运行时加载了错误的副本。中的文件
/usr/lib/x86_64-linux-gnu
是指向 的链接libgnutls.so.30.14.10
,中的文件是指向/usr/local/lib/x86_64-linux-gnu
的链接libgnutls.so.30.13.1
。确认:正在运行
ldd
表明libgiognutls
它确实尝试链接到该/usr/local/lib
版本。更多确认:更改
LD_LIBRARY_PATH
无效。查看ld.so
手册页显示这可能是因为在调用 ld.so 时获得了一些提升的特权。做
sudo su
然后改变LD_LIBRARY_PATH
。在这一点上,我确信这是两个版本的链接优先级的libgnutls
问题。已解决:我只是信心大增,将文件链接
/usr/local/lib/libgnutls.so
到/usr/lib/x86_64-linux-gnu/libgnutls.so
文件,.30
版本也一样。到目前为止,什么都没有损坏,错误消息也消失了。