Попробуйте удалить этот файл по его иноду:
ls -lasi | grep filename
find. -inum inode-number -exec rm -rf {} \;
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
Вы можете использовать rpm -qpR <rpm>
, чтобы определить, какие зависимости для этого требуются.
Суть вашей проблемы в том, что вы пытаетесь использовать пакет, созданный с использованием другой версии компилятора GCC, а не тех библиотек времени выполнения, которые действительно доступны в вашей ОС.
В вашем случае вы используете CentOS 7.x, и вы действительно не можете смешивать RPM между Fedora и CentOS таким образом, или, по крайней мере, вы не должны.
Если вы посмотрите, какой пакет владеет этой общей библиотекой:
$ 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
Запустите приложение на виртуальной машине
Учитывая сходство между Fedora и CentOS, я добился хорошего успеха со многими из вышеперечисленных. Вы можете попробовать #5,и попробуйте один из старых RPM-пакетов Fedora на их веб-сайте, чтобы узнать, был ли он построен с использованием символов GCC для CentOS.
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, и там есть пошаговое руководство по его установке. После установки вы можете добавить библиотеку Anaconda в LD _LIBRARY _PATH. Например, если вы установили его в /opt/anaconda3, вы добавите эту строку в свой ~/.bash_profile
или~/.bashrc
:
export LD_LIBRARY_PATH=/opt/anaconda3/lib:$LD_LIBRARY_PATH
Затем вы можете запустить новый сеанс оболочки и снова запустить trillian.
Вы также можете скомпилировать исходники GCC6, GCC7 или GCC8, которые предоставят правильные библиотеки, которые вы затем сможете добавить в свой путь, но вам также придется скомпилировать исходники GMP, MPC и MPFR, что в вашем случае доставляет больше хлопот. чем оно того стоит.
Спасибо вам обоим --ваши ответы были очень полезными.
Мне не удалось найти для установки только библиотеку libstdc++, поэтому я решил установить Anaconda3. Это помогло мне обойти эту конкретную проблему только для того, чтобы представить мне другую:
$ триллиан trillian :ошибка поиска символа :trillian :неопределенный символ:_ZN4Glib25filename _display _basenameERKNSt7 __cxx1112basic _stringIcSt11char _traitsIcESaIcEEE
Теперь я иду искать решение этой проблемы. Любые предложения приветствуются, и еще раз спасибо вам обоим за то, что помогли мне зайти так далеко!