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_获取字体格式。這很好。

但是你的 freetype lib libfreetype.so.6 只提供了FT_获取_X11_字体格式。这很糟糕,因为此功能已被弃用。

我检查了自己的系统,发现有相同的文件 libfreetype.so.6,它提供了较新的 FT_Get_Font_Format 函数。我的是 freetype 6.17.4。

因此你必须有一个 freetype 版本:

6 <= version < 6.17.4

在您的操作系统上安装所有更新。如果您的操作系统不提供较新的 freetype lib,则只需降级 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.4yum 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

相关内容