Ошибка сегментации с Python с установкой PyICU
Я пытался установить библиотеку Python под названием Polyglot, которая, в свою очередь, требует PyICU, источника моих проблем. После погони за ошибками я смог установить PyICU на свой экземпляр EC2. Однако при запуске Polyglot и, в свою очередь, PyICU, я получаю следующую ошибку:
Traceback (most recent call last):
File "/mnt/data/anaconda3/bin/polyglot", line 11, in <module>
load_entry_point('polyglot==16.7.4', 'console_scripts', 'polyglot')()
File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 487, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2728, in load_entry_point
return ep.load()
File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2346, in load
return self.resolve()
File "/mnt/data/anaconda3/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2352, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/mnt/data/anaconda3/lib/python3.6/site-packages/polyglot/__main__.py", line 16, in <module>
from icu import Locale
File "/mnt/data/anaconda3/lib/python3.6/site-packages/icu/__init__.py", line 37, in <module>
from _icu import *
ImportError: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /home/linuxbrew/.linuxbrew/lib/libstdc++.so.6)
Чтобы решить вышеуказанную проблему, я выполнил следующие шаги:
mkdir ~/glibc_install; cd ~/glibc_install
wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxvf glibc-2.18.tar.gz
cd glibc-2.18
mkdir build
cd build
../configure --prefix=/opt/glibc-2.18
make -j4
make install
export LD_LIBRARY_PATH=/opt/glibc-2.18/lib
Но когда я просто запустил Python, у меня сразу же возникла ошибка сегментации.
Обратите внимание, что я использую Red Hat 7.1.2-2 на AWS EC2.
Любая помощь будет очень цениться!
1 ответ
Если вы просто хотите поэкспериментировать, вы можете использовать бета-версию Red Hat Enterprise Linux 8, которая поставляется с glibc 2.28 и поэтому предоставляет GLIBC_2.18
символы.
Ошибка сегментации исчезнет, если вы запустите Python с явным вызовом загрузчика (например, /opt/glibc-2.18/lib64/ld-linux-x86-64.so.2 python …
). Если вы хотите пойти в этом направлении, вам действительно следует использовать более свежую версию glibc, которая все еще поддерживается в апстриме (например, glibc 2.28 в настоящее время), и в идеале ветку релиза от Git, потому что она имеет много обратных портов для исправления различных ошибок.
Но следующая проблема заключается в том, что вы пытаетесь заменить системную библиотеку libstdC++ пользовательской копией. Это может привести к поломке системного программного обеспечения и сторонних приложений.
Вам следует попытаться получить копию программного обеспечения, которое вы пытаетесь установить, которое было разработано для Red Hat Enterprise Linux 7 (или даже Red Hat Enterprise Linux 6). Это будет намного проще в использовании, и избежать всех этих проблем. Если программное обеспечение написано с использованием более нового стандарта C++, чем C++98, вы можете использовать Developer Toolset. Он имеет гибридную модель связывания, статически связывающую код поддержки, необходимый для более нового стандарта C++, и в то же время все еще использующую систему libstdC++ для максимизации функциональной совместимости.