Qt-Startfehler: Symbolsuchfehler: /lib/libQt5XcbQpa.so.5: undefiniertes Symbol: FT_Get_Font_Format

Qt-Startfehler: Symbolsuchfehler: /lib/libQt5XcbQpa.so.5: undefiniertes Symbol: FT_Get_Font_Format

Wenn ich den folgenden Python-Code ausführe,

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(3)
plt.pyplot(a, a)
plt.show

Der Maschinendruck:

[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

Ich habe versucht,Qt-Startfehler: Symbolsuchfehler: libQt5XcbQpa.so.5: undefiniertes Symbol: FT_Get_Font_Format, aber es funktioniert nicht. Wenn ich

[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 werden ebenfalls getestet, die Ausgabe ist die gleiche, FT_Get_Font_Format kann nicht gefunden werden

Was soll ich in diesem Fall tun?

Centos version: CentOS Linux release 7.5.1804 (Core)
Qt5 version: 5.15.2
PyQt5 version: 5.15.9

Antwort1

Ihr PyQt verwendet die FreeType-FunktionFT_Get_Font_Format. Das ist gut.

Aber Ihre Freetype-Bibliothek libfreetype.so.6 bietet nurFT_Get_X11_Font_Format. Das ist schlecht, weil diese Funktion veraltet ist.

Ich habe mein eigenes System überprüft und habe dieselbe Datei libfreetype.so.6, die die neuere Funktion FT_Get_Font_Format bereitstellt. Ich habe Freetype 6.17.4.

Sie müssen also über eine Freetype-Version verfügen, die:

6 <= version < 6.17.4

Installieren Sie alle Updates auf Ihrem Betriebssystem. Wenn Ihr Betriebssystem keine neuere Freetype-Bibliothek anbietet, führen Sie einfach ein Downgrade von matplotlib durch.

Führen Sie Folgendes aus, um Ihre aktuelle Matplotlib zu deinstallieren:

pip uninstall matplotlib

Führen Sie dies aus, um alle verfügbaren Matplotlib-Versionen aufzulisten:

pip index versions matplotlib

Führen Sie dies aus, um eine bestimmte Version von Matplotlib zu installieren:

pip install matplotlib==3.6.2

Sie können mit 3.6.2 beginnen. Wenn das nicht funktioniert, deinstallieren Sie es und wechseln Sie eine Version zurück auf 3.6.1. Tun Sie dies, bis Ihr Skript einwandfrei läuft.

Antwort2

Der Grund liegt eigentlich darin, dass der Freetype von freetype-2.8noch freetype-2.10nicht vollständig kompiliert wurde. Die Version wird immer noch freetype-2.4von bereitgestellt yum install freetype.

Ich benutze die folgenden Links, dann FT_GET_Font_Formatist die Funktion zu finden.

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

verwandte Informationen