Qt 啟動錯誤:符號查找錯誤:/lib/libQt5XcbQpa.so.5:未定義符號:FT_Get_Font_Format

Qt 啟動錯誤:符號查找錯誤:/lib/libQt5XcbQpa.so.5:未定義符號:FT_Get_Font_Format

當我運行以下 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.8freetype-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

相關內容