cbu*_*ard 4 yum libraries centos dependencies shared-library
我想将 Trillian 安装到我的 CentOS 7 机器上。我去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
Run Code Online (Sandbox Code Playgroud)
将安装软件包并检查和检索解决依赖项所需的任何其他文件。它显然没有找到任何:
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!
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试运行该程序时,我得到以下信息:
$ 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)
Run Code Online (Sandbox Code Playgroud)
我试图找到一种下载这些特定库的方法。
YUM 做到了这一点。但它仅与 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
Run Code Online (Sandbox Code Playgroud)
您可以使用它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
Run Code Online (Sandbox Code Playgroud)
您还可以调查共享库本身以查看它支持哪些 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
Run Code Online (Sandbox Code Playgroud)
最后看看它是否包括这个 RPM 的二进制文件正在寻找的那些:
$ nm -D /lib64/libstdc++.so.6 | grep -iE '3\.4\.20|3\.4\.21'
$
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,这个.so
库不包含这些 GCC 版本中的任何一个的符号,因此是错误的。
您处理此问题的典型方法是:
仅从libstdc++.so.6
其他工具获取库(许多应用程序选择包含库以便于部署/设置/安装)并通过您的LD_LIBRARY_PATH
. 你通常这样做:
$ LD_LIBRARY_PATH=/path/to/lib trillian
Run Code Online (Sandbox Code Playgroud)在 VM 中运行应用程序
鉴于 Fedora 和 CentOS 之间的相似性,我在上述许多方面都取得了不错的成功。您可以尝试 #5,并在他们的网站上尝试使用较旧的 Fedora RPM 之一,看看它是否是使用 CentOS 版本的 GCC 符号构建的。
归档时间: |
|
查看次数: |
3004 次 |
最近记录: |