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
の2つのバージョンの/usr/local/lib/
があることがわかりました。
これらのファイルでnm -gC
およびreadelf -sW
をgrep
とともに実行すると、最初のファイルには問題のシンボルが含まれ、2番目のファイルには含まれないことがわかります。これにより、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
の2つのバージョンのリンク優先順位であると確信しています。
解決済み:信頼の飛躍を遂げ、/usr/local/lib/libgnutls.so
を/usr/lib/x86_64-linux-gnu/libgnutls.so
ファイルにリンクしましたが、同じファイルを.30
バージョンにもリンクしました。これまでのところ何も壊れておらず、エラーメッセージは消えています。