[英]Segmentation fault with Python with install of PyICU
我一直在嘗試安裝一個名為 Polyglot 的 Python 庫,而這又需要 PyICU,這是我的問題之源。 在對錯誤的瘋狂追逐之后,我能夠在我的 EC2 實例上安裝 PyICU。 但是,在運行 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 時,我立即遇到了分段錯誤。
請注意,我在 AWS EC2 上使用 Red Hat 7.1.2-2。
任何幫助都將不勝感激!
如果您只是想嘗試一下,您可以使用 Red Hat Enterprise Linux 8 的 beta 版,它隨 glibc 2.28 一起提供,因此提供了GLIBC_2.18
符號。
如果您使用顯式加載程序調用(例如/opt/glibc-2.18/lib64/ld-linux-x86-64.so.2 python …
)運行 Python,則分段錯誤將消失。 如果你想朝這個方向發展,你真的應該使用一個更新版本的 glibc 仍然在上游維護(比如此時的 glibc 2.28),最好是 Git 的發布分支,因為它有很多 backports 來修復各種錯誤。
但下一個問題是您試圖用自定義副本替換系統 libstdc++ 庫。 這可能會破壞系統軟件和第三方應用程序。
您應該嘗試獲取為 Red Hat Enterprise Linux 7(甚至 Red Hat Enterprise Linux 6)構建的軟件副本。 它會更容易使用,並避免所有這些問題。 如果軟件是使用比 C++98 更新的 C++ 標准編寫的,則可以使用Developer Toolset 。 它有一個混合鏈接模型,靜態鏈接更新的 C++ 標准所需的支持代碼,同時仍然使用系統 libstdc++ 來實現互操作性最大化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.