我一直在试图安装一个名为多语种一个Python库,而这又需要PyICU,我的困境的根源。错误的大雁追逐后,我能在我的EC2实例安装PyICU。但是,在运行多语种时,反过来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,我得到了一个直接的分段错误。
请注意,我在一个AWS EC2使用Red Hat 7.1.2-2。
任何帮助都将是非常感谢!
如果你只是想尝试,你可以使用红帽企业版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与自定义副本++库。这会破坏系统软件和第三方应用程序。
你应该尝试让你尝试安装已建成了红帽企业Linux 7(甚至是红帽企业Linux 6)软件的副本。这将是更容易使用,并避免所有这些问题。如果软件使用较新的C ++标准比C ++编写的98,可以使用Developer Toolset。它有一个混合连接模式,静态链接所需的较新的C ++标准支持代码,同时仍然使用该系统的libstdc ++对于其余部分,以最大化互操作性。