
當我運行以下 python 程式碼時,
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(3)
plt.pyplot(a, a)
plt.show
機器列印:
[test001@login01 ~]$ python3 draw.py
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-test001'
python3: symbol lookup error: /beegfs/home/test001/.local/lib/python3.11/site-packages/PyQt5/Qt5/plugins/platforms/..//lib/libQt5XcbQpa.so.5: undefined symbol: FT_Get_Font_Format
我已經嘗試過的方法Qt啟動錯誤:符號查找錯誤:libQt5XcbQpa.so.5:未定義符號:FT_Get_Font_Format,但它不起作用。當我使用
[test001@login01 ~]$ readelf -s /lib64/libfreetype.so.6 | grep -i font_format
406: 0000000000020960 43 FUNC GLOBAL DEFAULT 11 FT_Get_X11_Font_Format
freetype-2.8、2.10、2.12也測試了,輸出是一樣的,找不到FT_Get_Font_Format
這種情況我該怎麼辦?
Centos version: CentOS Linux release 7.5.1804 (Core)
Qt5 version: 5.15.2
PyQt5 version: 5.15.9
答案1
你的 PyQt 使用 FreeType 函數FT_Get_Font_Format。這很好。
但你的 freetype lib libfreetype.so.6 只提供FT_Get_X11_Font_Format。這很糟糕,因為該函數已被棄用。
我檢查了我自己的系統,我有相同的檔案 libfreetype.so.6 提供更新的 FT_Get_Font_Format 函數。我有 freetype 6.17.4。
所以你必須有一個 freetype 版本:
6 <= version < 6.17.4
在您的作業系統上安裝所有更新。如果您的作業系統不提供更新的 freetype 函式庫,則只需降級 matplotlib 即可。
執行此命令來卸載目前的 matplotlib:
pip uninstall matplotlib
執行此命令以列出所有可用的 matplotlib 版本:
pip index versions matplotlib
執行此命令來安裝特定版本的 matplotlib:
pip install matplotlib==3.6.2
您可以從 3.6.2 開始,如果這不起作用,請將其卸載並降到 3.6.1。這樣做直到你的腳本運作良好。
答案2
其實原因是freetype的freetype-2.8
,freetype-2.10
沒有編譯完全。該版本仍然使用freetype-2.4
提供的yum install freetype
。
我使用以下鏈接,然後FT_GET_Font_Format
可以找到該功能。
export LD_LIBRARY_PATH=/usr/lib/zlib/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/libpng/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=software/freetype/lib:$LD_LIBRARY_PATH