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)
これらの特定のライブラリをダウンロードする方法を見つけようとしました。
YUMはこれを行います。しかし、それはRPMが指定するのと同じくらい良いだけです。この場合、RPMはそれが2.13を超えるGLIBCで動作することを示していますが、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コンパイラーを使用してビルドされたパッケージと、OSで実際に使用できるランタイムライブラリのパッケージを使用しようとしていることです。
あなたの場合、あなたは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のシンボルが含まれていないため、エラーが発生します。
これに対処する一般的な方法は次のいずれかです。
他のツールからlibstdc++.so.6
ライブラリのみを取得し(多くのアプリは、簡単な展開/セットアップ/インストールのためにライブラリを含めることを選択します)、LD_LIBRARY_PATH
を介してそれをポイントします。通常は次のようにします。
$ LD_LIBRARY_PATH=/path/to/lib trillian
VMでアプリを実行する
FedoraとCentOSの類似点を考えると、上記の多くで大きな成功を収めてきました。あなたは#5を試して、彼らのウェブサイトで古いFedora RPMの1つを試して、CentOSのバージョンのGCCシンボルでビルドされているかどうかを確認することができます。
yum
は、他のパッケージに関する依存関係を解決します。つまり、インストールしようとしているパッケージに依存するパッケージをインストールします。
受け取っているエラーは、ライブラリファイル/lib64/libstdc++.so.6にGLIBCXX_3.4.20
またはGLIBCXX_3.4.21
が含まれていないことが原因です。通常、/ usr/lib64/libstdc ++。so.6は/usr/lib64/libstdc++.so.6.0.#へのシンボリックリンクです。ここで、#は内部のGLIBCXXの最も高いバージョンです。
このコマンドを実行すると、含まれているGLIBCXXのバージョンが表示されます。
strings /usr/lib64/libstdc++.so.6 | grep -i ^glibcxx_
持っていないので、それらのライブラリを含むパッケージをインストールする必要があります。
インストールする最も簡単なパッケージは次のとおりです。
アナコンダ3
AnacondaのWebサイトからダウンロードでき、インストールのチュートリアルがあります。インストール後、AnacondaのライブラリをLD_LIBRARY_PATHに追加できます。たとえば、/ opt/anaconda3にインストールした場合は、次の行を~/.bash_profile
または~/.bashrc
に追加します。
export LD_LIBRARY_PATH=/opt/anaconda3/lib:$LD_LIBRARY_PATH
その後、新しいシェルセッションを開始し、トリリアンを再度実行できます。
パスに追加できる正しいライブラリを提供するソースコンパイルGCC6、GCC7、またはGCC8をソースコンパイルすることもできますが、ソースコンパイルGMP、MPC、およびMPFRをソースコンパイルする必要があります。 。
両方ありがとう-あなたの答えは非常に役に立ちました。
インストールするlibstdc ++ライブラリだけを見つけることができなかったので、Anaconda3のインストールに進みました。これは私にその特定の問題を乗り越えさせましたが、私に別の問題を提示するだけでした:
$トリリアントリリアン:シンボルルックアップエラー:トリリアン:未定義のシンボル:_ZN4Glib25filename_display_basenameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
だから今、私はその問題の解決策を探しに行きます。どんな提案も歓迎します、そして私がこれまでのところ到達するのを助けてくれてありがとう!