グーグル、私はこのエラーがPangoライブラリを使用するさまざまなソフトウェアで発生することを確認しました。 Pangoは、HarfBuzzシェーピングエンジンと連携して多言語テキストを表示するテキストレイアウトエンジンライブラリです。
ソフトウェアがコマンドラインツールである場合、または端末から起動された場合、エラーは次のようになります。
:~$ sudo ah
(ah:2782): Pango-ERROR **: 16:54:45.844: Harfbuzz version too old (1.3.1)
Trace/breakpoint trap
:~$
このエラーを修正するにはどうすればよいですか?
よろしくお願いします
承認された回答:
ライブラリのバージョン間の互換性の問題に直面していることは簡単に理解できます。
この問題のある環境で解決策を見てみましょう:
- OS:Ubuntu 20.04(amd64)
- ソフトウェア:Vectr 0.1.15(ベクターグラフィックス
エディター)
この場合、開こうとしても何も起こらず、開かれませんが、エラーも表示されません。エラーは、端末(./vectr
)からVectrを起動しようとしたときにのみ発生します。 。
まず、エラーの原因となっている可能性のある依存関係を見てみましょう。
:~/Downloads/Vectr$ ldd vectr | grep pango
libpangocairo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangocairo-1.0.so.0 (0x00007f4ab3581000)
libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f4ab33e7000)
libpangoft2-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 (0x00007f4ab1b3b000)
これはさまざまな方法で行うことができます。Googleに問い合わせてください。
インストールしたライブラリの詳細を確認したい場合は、次のコマンドを使用できます。 2番目の列はバージョンを示していることに注意してください:
:~/Downloads/Vectr$ dpkg -l | grep libpango
ii libpango-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpango-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
ii libpangocairo-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpangocairo-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
ii libpangoft2-1.0-0:amd64 1.44.7-2ubuntu4 amd64 Layout and rendering of internationalized text
ii libpangoft2-1.0-0:i386 1.44.7-2ubuntu4 i386 Layout and rendering of internationalized text
最初の解決策
エラーは1つのソフトウェアにのみ影響するため、システムにインストールされているライブラリをダウングレードするのは便利ではないと思います(2番目の解決策 )、他のソフトウェアに影響を与える可能性があります。
したがって、このソリューションは、ライブラリ(古いバージョン)をソフトウェアが存在するフォルダーのルートにコピーすることで構成されます。私の場合は移植可能であり、Downloads/Vectr
にあります。 。
正確な依存関係はすでに確認済みです。手動でダウンロードします(アーキテクチャを選択して.debをダウンロードします):
- libpango-1.0-0(1.42.4-7)
- libpangocairo-1.0-0(1.42.4-7)
- libpangoft2-1.0-0(1.42.4-7)
前に見たように、私のアーキテクチャはamd64ですが、システムはi386バージョンのライブラリもインストールします。この手順は手動で移植可能であるため、amd64のみを使用することにしました。ただし、エラーが発生した場合は、2つのアーキテクチャを一緒に使用してみてください。
アーカイブマネージャーで.debを開きます 、data.tar.xz
を開きます ファイルを作成し、/./usr/lib/x86_64-linux-gnu/
に移動します。 ソフトウェアのルートフォルダにあるこれら2つのファイルを抽出します(Downloads/Vectr
)。 ダウンロードした.debファイルごとに繰り返します 。
その後、ソフトウェアは正常に実行されます。そして、実行した場合:
:~/Downloads/Vectr$ ldd vectr | grep pango
libpangocairo-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangocairo-1.0.so.0 (0x00007fc6b0ac8000)
libpango-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpango-1.0.so.0 (0x00007fc6b0931000)
libpangoft2-1.0.so.0 => /home/myuser/Downloads/Vectr/./libpangoft2-1.0.so.0 (0x00007fc6af084000)
依存関係のアドレスが/usr/lib/x86_64-linux-gnu/
からどのように変更されたかがわかります。 /home/myuser/Downloads/Vectr/
へ 。
2番目のソリューション
これらのライブラリをダウングレードします(この方法は他のソフトウェアで誤動作を引き起こす可能性があることに注意してください)。
関連:ツリーにディレクトリのみを出力させる方法は?バリアント1:(これは試すことができませんでした)
ソースにあるリポジトリから古いバージョンをインストールします。
ライブラリの利用可能なバージョンを一覧表示します:
:~$ apt-cache madison libpango-1.0-0
libpango-1.0-0 | 1.44.7-2ubuntu4 | http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
私の場合、私は現在のバージョンしか持っておらず、それが競合を引き起こしているバージョンです。他のバージョンを入手した場合は、次のコマンドでダウングレードできます:
:~$ sudo apt install pkg-name=old-version
インストールする必要のあるライブラリがさらに2つあることを忘れないでください(libpangocairo-1.0-0とlibpangoft2-1.0-0)。これらが依存関係として自動的にインストールされるかどうかはわかりません。この疑問はi386のバージョンにも当てはまります。
バリアント2:(私はこれを試しました)
以前のバージョンをお持ちでない場合は、最初のソリューションに示されているようにダウンロードする必要があります(.deb)。 。また、重大なエラーを回避するには、i386のバージョンもダウンロードする必要があります(この例では、Ubuntu amd64があることに注意してください。 。
ファイルをダウンロードした後、ファイルを保存したフォルダーでターミナルを開き、次のコマンドでダウングレードできます。
:~$ sudo dpkg -i libpango*.deb
これはエラーで終わる可能性がありますが、最終的にはソフトウェアは正常に動作し、明らかにすべてが正常に動作します。将来の結果はまだわかりません。
元に戻す このダウングレードはsudo apt update
を実行します 、次にsudo apt upgrade
確かにsudo apt --fix-broken install
が必要になります 。
次に、変更を永続的にし、これらのライブラリが誤って更新されないようにする場合は、次のコマンドを使用できます。
:~$ sudo apt-mark hold package-name
これにより、システムのアップグレード中にライブラリが自動的にインストール、更新、アップグレード、または削除されるのを防ぎます。そして、次のコマンドで元に戻すことができます:
:~$ sudo apt-mark unhold package-name