簡體   English   中英

安裝 PyICU 的 Python 分段錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM