Centos 7、「yum install ___」もすべての依存関係を取得する必要があると思いましたか?

Centos 7、「yum install ___」もすべての依存関係を取得する必要があると思いましたか?

私はCentOS 7コンピュータにTrillianをインストールしたいと思います。私はwww.trillian.im/get/linux/6.1/linux.htmlに行き、rpmパッケージtrillian-6.1.0.5-1.fc25.x86_64.rpmをダウンロードしました。

私が理解している限り、以下を使用してください。

$ yum install trillian-6.1.0.5-1.fc25.x86_64.rpm

パッケージがインストールされ、依存関係を解決するために必要な追加ファイルが確認され、検索されます。何も見つからないようです。

Marking trillian-6.1.0.5-1.fc25.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package trillian.x86_64 0:6.1.0.5-1.fc25 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package    Arch     Version            Repository                         Size
================================================================================
Installing:
 trillian   x86_64   6.1.0.5-1.fc25     /trillian-6.1.0.5-1.fc25.x86_64    30 M

Transaction Summary
================================================================================
Install  1 Package

.
.
.

Installed:
  trillian.x86_64 0:6.1.0.5-1.fc25                                              

Complete!

ただし、プログラムを実行しようとすると、次の結果が表示されます。

$ trillian
trillian: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by trillian)
trillian: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by trillian)

これらの特定のライブラリをダウンロードする方法を見つけようとしています。

ベストアンサー1

yumとdepsでコメント

ユムは確かにそうです。ただし、RPMが指定した分だけ良いです。この場合、RPMはGLIBC> 2.13で動作することを示していますが、これは明らかに特定のバージョンのGLIBCで構築されており、システムに適切なGCCシンボルがある場合にのみ機能します。

$ rpm -qpR trillian-6.1.0.5-1.fc25.x86_64.rpm
atkmm >= 2.22.0
cairo >= 1.12.0
cairomm >= 1.10.0
gdk-pixbuf2 >= 2.26.0
glib2 >= 2.30.0
glibc >= 2.13
glibmm24 >= 2.32.0
gtk3 >= 3.4.0
gtkmm30 >= 3.4.0
libX11 >= 1.5.0
libXScrnSaver >= 1.2.0
libnotify >= 0.7.5
librsvg2-tools >= 2.36.0
libsigc++20 >= 2.2.10
libzip >= 0.10.0
openssl-libs >= 1:1.0.1
pango >= 1.30.0
pangomm >= 2.28.0
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
zlib >= 1.2.0

rpm -qpR <rpm>これを使用して、必要な依存関係を決定できます。

ご質問に関する追加情報

問題の鍵は、オペレーティングシステムで実際に使用できるランタイムライブラリとは異なるバージョンのGCCコンパイラで構築されたパッケージを使用しようとしていることです。

あなたの場合はCentOS 7.xを使用しており、実際にFedoraとCentOSの間でRPMを混在させることはできません。

共有ライブラリを所有するパッケージを見てみましょう。

$ rpm -qf /lib64/libstdc++.so.6
libstdc++-4.8.5-28.el7_5.1.x86_64

共有ライブラリ自体を調べて、サポートしているGCCシンボルを確認することもできます。

$ nm -D /lib64/libstdc++.so.6 | grep -i GLIBC | head -5
0000000000000000 A GLIBCXX_3.4
0000000000000000 A GLIBCXX_3.4.1
0000000000000000 A GLIBCXX_3.4.10
0000000000000000 A GLIBCXX_3.4.11
0000000000000000 A GLIBCXX_3.4.12

最後に、RPMバイナリが探しているものが含まれていることを確認してください。

$ nm -D /lib64/libstdc++.so.6 | grep -iE '3\.4\.20|3\.4\.21'
$

当然、この.soライブラリには両方のGCCバージョンのシンボルが含まれていないため、エラーが発生します。

何をすべきか?

この問題を解決する一般的な方法は次のとおりです。

  1. GCCシンボル定義用に構築されたバイナリをインポートする
  2. 他のツールからライブラリをインポートしlibstdc++.so.6(多くのアプリケーションがより簡単なデプロイ/設定/インストールのためのライブラリを含めることを選択します)LD_LIBRARY_PATH

    $ LD_LIBRARY_PATH=/path/to/lib trillian
    
  3. 仮想マシンでアプリケーションを実行する

  4. Dockerコンテナでアプリケーションを実行する
  5. オペレーティングシステムのGCC設定と一致するシンボルで書かれたバイナリを含むRPMバージョンを取得します。

FedoraとCentOSの類似点を考慮すると、上記の多くの項目で良い成功を収めました。 #5を試してWebサイトで以前のFedora RPMのいずれかを試して、CentOSバージョンのGCCシンボルで構築されていることを確認できます。

引用する

おすすめ記事