Cross compile Qt 5.7 for raspberry pi 3 problem : font (text words) in application not showing up during running
-
@Angel-Popov said in cross compile Qt 5.7 for raspberry pi 3 problem : font (text words) in application not showing up during running:
Note: I did native build QT 5.8
How did you do the native build of 5.8? I'm struggling with 5.7 for a while now it seems all wiki's are outdated for a Rasp3/Jessie build?
@larry104 I followed just these few simple steps https://blog.kaloshin.ru/2016/12/10/raspberry-pi-3-и-qt-5-8/
And as far as I remember I did pass -skip qtgamepad.However, the text problem remains.
-
Note that /usr/local/qt5pi/lib/fonts is supposed to be flat, meaning the ttf files must be right in there, without any subdirectories. An alternative, if you do not want to copy anything, is to set QT_QPA_FONTDIR to something suitable, f.ex. /usr/share/fonts/truetype/dejavu (do export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu before running the application)
This is of course just a workaround. Why Qt was configured without fontconfig support (this is visible in the summary that is printed after running configure, look for a line with something like "fontconfig ..... no"), is a different question. It usually happens when a system Freetype is not available. Did you follow step #3 at https://wiki.qt.io/RaspberryPi2EGLFS in order to get a rootfs that has the necessary headers/libs?
-
Note that /usr/local/qt5pi/lib/fonts is supposed to be flat, meaning the ttf files must be right in there, without any subdirectories. An alternative, if you do not want to copy anything, is to set QT_QPA_FONTDIR to something suitable, f.ex. /usr/share/fonts/truetype/dejavu (do export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu before running the application)
This is of course just a workaround. Why Qt was configured without fontconfig support (this is visible in the summary that is printed after running configure, look for a line with something like "fontconfig ..... no"), is a different question. It usually happens when a system Freetype is not available. Did you follow step #3 at https://wiki.qt.io/RaspberryPi2EGLFS in order to get a rootfs that has the necessary headers/libs?
@agocs Thank you for you answer. I will check this out as soos as I can.
About fontconfig support, the following is the summary of the build with -fonconfing included:
Build options:
Mode ................................... release; optimized tools
Building shared libraries .............. yes
Using C++ standard ..................... C++14
Using gold linker ...................... yes
Using new DTAGS ........................ yes
Using precompiled headers .............. yes
Using LTCG ............................. no
Target compiler supports:
NEON ................................. no
Build parts ............................ libs
Qt modules and options:
Qt Concurrent .......................... yes
Qt D-Bus ............................... yes
Qt D-Bus directly linked to libdbus .... no
Qt Gui ................................. yes
Qt Network ............................. yes
Qt Sql ................................. yes
Qt Testlib ............................. yes
Qt Widgets ............................. yes
Qt Xml ................................. yes
Support enabled for:
Accessibility .......................... yes
Using pkg-config ....................... no
QML debugging .......................... yes
udev ................................... yes
Using system zlib ...................... yes
Qt Core:
DoubleConversion ....................... yes
Using system DoubleConversion ........ no
GLib ................................... no
iconv .................................. no
ICU .................................... yes
Logging backends:
journald ............................. no
syslog ............................... no
slog2 ................................ no
Using system PCRE ...................... no
Qt Network:
getaddrinfo() .......................... yes
getifaddrs() ........................... yes
IPv6 ifname ............................ yes
libproxy ............................... no
OpenSSL ................................ yes
Qt directly linked to OpenSSL ........ no
SCTP ................................... no
Use system proxies ..................... yes
Qt Sql:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................. yes
OCI (Oracle) ........................... no
ODBC ................................... yes
PostgreSQL ............................. yes
SQLite2 ................................ yes
SQLite ................................. yes
Using system provided SQLite ......... no
TDS (Sybase) ........................... yes
Qt Gui:
FreeType ............................... yes
Using system FreeType ................ no
HarfBuzz ............................... yes
Using system HarfBuzz ................ no
Fontconfig ............................. no
Image formats:
GIF .................................. yes
ICO .................................. yes
JPEG ................................. yes
Using system libjpeg ............... yes
PNG .................................. yes
Using system libpng ................ no
OpenGL:
EGL .................................. yes
Desktop OpenGL ....................... no
OpenGL ES 2.0 ........................ yes
OpenGL ES 3.0 ........................ no
OpenGL ES 3.1 ........................ no
Session Management ..................... yes
Features used by QPA backends:
evdev .................................. yes
libinput ............................... no
mtdev .................................. no
tslib .................................. yes
xkbcommon-evdev ........................ no
QPA backends:
DirectFB ............................... no
EGLFS .................................. yes
EGLFS details:
EGLFS i.Mx6 .......................... no
EGLFS i.Mx6 Wayland .................. no
EGLFS EGLDevice ...................... no
EGLFS GBM ............................ no
EGLFS Mali ........................... no
EGLFS Raspberry Pi ................... yes
EGL on X11 ........................... no
LinuxFB ................................ yes
Mir client ............................. no
X11:
Using system provided XCB libraries .. yes
EGL on X11 ........................... no
Xinput2 .............................. yes
XCB XKB .............................. yes
XLib ................................. yes
Xrender .............................. yes
XCB render ........................... yes
XCB GLX .............................. yes
XCB Xlib ............................. yes
Using system-provided xkbcommon ...... no
Qt Widgets:
GTK+ ................................... no
Styles ................................. Fusion Windows
Qt PrintSupport:
CUPS ................................... yes
Qt SerialBus:
Socket CAN ............................. yes
Socket CAN FD .......................... yes
QtXmlPatterns:
XML schema support ..................... yes
Qt QML:
QML interpreter ........................ yes
QML network support .................... yes
Qt Quick:
Direct3D 12 ............................ no
AnimatedImage item ..................... yes
Canvas item ............................ yes
Support for Quick Designer ............. yes
Flipable item .......................... yes
GridView item .......................... yes
ListView item .......................... yes
Path support ........................... yes
PathView item .......................... yes
Positioner items ....................... yes
ShaderEffect item ...................... yes
Sprite item ............................ yes
Qt 3D:
System Assimp .......................... no
Qt Wayland Drivers:
EGL .................................... yes
Rasberry Pi ............................ yes
XComposite EGL ......................... no
XComposite GLX ......................... no
DRM EGL ................................ no
libhybris EGL .......................... no
Qt Wayland Client ........................ yes
Qt Wayland Compositor .................... yes
Qt Bluetooth:
BlueZ .................................. no
BlueZ Low Energy ....................... no
Linux Crypto API ....................... no
Qt Multimedia:
ALSA ................................... yes
GStreamer 1.0 .......................... no
GStreamer 0.10 ......................... no
Video for Linux ........................ yes
OpenAL ................................. no
PulseAudio ............................. no
Resource Policy (libresourceqt5) ....... no
DirectShow ............................. no
Qt Location:
Gypsy GPS Daemon ....................... no
WinRT Geolocation API .................. no
Qt Sensors:
sensorfw ............................... no
Qt WebEngine:
Proprietary Codecs ..................... no
Spellchecker ........................... yes
ALSA ................................... yes
PulseAudio ............................. noNote: Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx
Note: -optimized-tools is not useful in -release mode.
WARNING: Cross compiling without sysroot. Disabling pkg-config
ERROR: Feature 'fontconfig' was enabled, but the pre-condition '!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig' failed.
I'm not able to activate the feature it says : ERROR: Feature 'fontconfig' was enabled, but the pre-condition '!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig' failed.
Thanks in advance
-
@agocs Thank you for you answer. I will check this out as soos as I can.
About fontconfig support, the following is the summary of the build with -fonconfing included:
Build options:
Mode ................................... release; optimized tools
Building shared libraries .............. yes
Using C++ standard ..................... C++14
Using gold linker ...................... yes
Using new DTAGS ........................ yes
Using precompiled headers .............. yes
Using LTCG ............................. no
Target compiler supports:
NEON ................................. no
Build parts ............................ libs
Qt modules and options:
Qt Concurrent .......................... yes
Qt D-Bus ............................... yes
Qt D-Bus directly linked to libdbus .... no
Qt Gui ................................. yes
Qt Network ............................. yes
Qt Sql ................................. yes
Qt Testlib ............................. yes
Qt Widgets ............................. yes
Qt Xml ................................. yes
Support enabled for:
Accessibility .......................... yes
Using pkg-config ....................... no
QML debugging .......................... yes
udev ................................... yes
Using system zlib ...................... yes
Qt Core:
DoubleConversion ....................... yes
Using system DoubleConversion ........ no
GLib ................................... no
iconv .................................. no
ICU .................................... yes
Logging backends:
journald ............................. no
syslog ............................... no
slog2 ................................ no
Using system PCRE ...................... no
Qt Network:
getaddrinfo() .......................... yes
getifaddrs() ........................... yes
IPv6 ifname ............................ yes
libproxy ............................... no
OpenSSL ................................ yes
Qt directly linked to OpenSSL ........ no
SCTP ................................... no
Use system proxies ..................... yes
Qt Sql:
DB2 (IBM) .............................. no
InterBase .............................. no
MySql .................................. yes
OCI (Oracle) ........................... no
ODBC ................................... yes
PostgreSQL ............................. yes
SQLite2 ................................ yes
SQLite ................................. yes
Using system provided SQLite ......... no
TDS (Sybase) ........................... yes
Qt Gui:
FreeType ............................... yes
Using system FreeType ................ no
HarfBuzz ............................... yes
Using system HarfBuzz ................ no
Fontconfig ............................. no
Image formats:
GIF .................................. yes
ICO .................................. yes
JPEG ................................. yes
Using system libjpeg ............... yes
PNG .................................. yes
Using system libpng ................ no
OpenGL:
EGL .................................. yes
Desktop OpenGL ....................... no
OpenGL ES 2.0 ........................ yes
OpenGL ES 3.0 ........................ no
OpenGL ES 3.1 ........................ no
Session Management ..................... yes
Features used by QPA backends:
evdev .................................. yes
libinput ............................... no
mtdev .................................. no
tslib .................................. yes
xkbcommon-evdev ........................ no
QPA backends:
DirectFB ............................... no
EGLFS .................................. yes
EGLFS details:
EGLFS i.Mx6 .......................... no
EGLFS i.Mx6 Wayland .................. no
EGLFS EGLDevice ...................... no
EGLFS GBM ............................ no
EGLFS Mali ........................... no
EGLFS Raspberry Pi ................... yes
EGL on X11 ........................... no
LinuxFB ................................ yes
Mir client ............................. no
X11:
Using system provided XCB libraries .. yes
EGL on X11 ........................... no
Xinput2 .............................. yes
XCB XKB .............................. yes
XLib ................................. yes
Xrender .............................. yes
XCB render ........................... yes
XCB GLX .............................. yes
XCB Xlib ............................. yes
Using system-provided xkbcommon ...... no
Qt Widgets:
GTK+ ................................... no
Styles ................................. Fusion Windows
Qt PrintSupport:
CUPS ................................... yes
Qt SerialBus:
Socket CAN ............................. yes
Socket CAN FD .......................... yes
QtXmlPatterns:
XML schema support ..................... yes
Qt QML:
QML interpreter ........................ yes
QML network support .................... yes
Qt Quick:
Direct3D 12 ............................ no
AnimatedImage item ..................... yes
Canvas item ............................ yes
Support for Quick Designer ............. yes
Flipable item .......................... yes
GridView item .......................... yes
ListView item .......................... yes
Path support ........................... yes
PathView item .......................... yes
Positioner items ....................... yes
ShaderEffect item ...................... yes
Sprite item ............................ yes
Qt 3D:
System Assimp .......................... no
Qt Wayland Drivers:
EGL .................................... yes
Rasberry Pi ............................ yes
XComposite EGL ......................... no
XComposite GLX ......................... no
DRM EGL ................................ no
libhybris EGL .......................... no
Qt Wayland Client ........................ yes
Qt Wayland Compositor .................... yes
Qt Bluetooth:
BlueZ .................................. no
BlueZ Low Energy ....................... no
Linux Crypto API ....................... no
Qt Multimedia:
ALSA ................................... yes
GStreamer 1.0 .......................... no
GStreamer 0.10 ......................... no
Video for Linux ........................ yes
OpenAL ................................. no
PulseAudio ............................. no
Resource Policy (libresourceqt5) ....... no
DirectShow ............................. no
Qt Location:
Gypsy GPS Daemon ....................... no
WinRT Geolocation API .................. no
Qt Sensors:
sensorfw ............................... no
Qt WebEngine:
Proprietary Codecs ..................... no
Spellchecker ........................... yes
ALSA ................................... yes
PulseAudio ............................. noNote: Also available for Linux: linux-clang linux-kcc linux-icc linux-cxx
Note: -optimized-tools is not useful in -release mode.
WARNING: Cross compiling without sysroot. Disabling pkg-config
ERROR: Feature 'fontconfig' was enabled, but the pre-condition '!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig' failed.
I'm not able to activate the feature it says : ERROR: Feature 'fontconfig' was enabled, but the pre-condition '!config.win32 && !config.darwin && features.system-freetype && libs.fontconfig' failed.
Thanks in advance
@Angel-Popov Call configure with additional -v parameter, then you should see why fontconfig check fails (most probably missing libs/header).
-
Note that /usr/local/qt5pi/lib/fonts is supposed to be flat, meaning the ttf files must be right in there, without any subdirectories. An alternative, if you do not want to copy anything, is to set QT_QPA_FONTDIR to something suitable, f.ex. /usr/share/fonts/truetype/dejavu (do export QT_QPA_FONTDIR=/usr/share/fonts/truetype/dejavu before running the application)
This is of course just a workaround. Why Qt was configured without fontconfig support (this is visible in the summary that is printed after running configure, look for a line with something like "fontconfig ..... no"), is a different question. It usually happens when a system Freetype is not available. Did you follow step #3 at https://wiki.qt.io/RaspberryPi2EGLFS in order to get a rootfs that has the necessary headers/libs?
@agocs I solved on QT 5.8 by providing fonts in Qt/lib/fonts without any subdirectories. However, the graphics quality is not so good and animations run slow. It says, in the debug console as I run the app, that JIT is disabled and it is required for fluid animations. How can I improve the graphics, enable JIT and have better performance?
Thanks
-
I am encountering this exact situation as well. Spent many hours on it, still not solved
In my environment sysroot + pkg-config are fully configured. Using Qt 5.8
If I poke into the pkgconfig folder fontconfig does report it's there.
/usr/lib/arm-linux-gnueabihf/libfontconfig.so in sysroot is present
-
I am encountering this exact situation as well. Spent many hours on it, still not solved
In my environment sysroot + pkg-config are fully configured. Using Qt 5.8
If I poke into the pkgconfig folder fontconfig does report it's there.
/usr/lib/arm-linux-gnueabihf/libfontconfig.so in sysroot is present
-
@Malachi Are fontconfig header files present in the sysroot?
Pass -v parameter to configure and check what it says about fontconfig. -
The files must be in the sysroot for your target, not from your desktop distribution.
-
In that case, you can pass the -v option to configure and check what happens with fontconfig there.
-
I'm already passing in -v to ./configure. Is there somewhere else I should be passing it in?
I have been fiddling around, and trying to use system-freetype as the prereq for fontconfig (I hope I am understanding that properly). I did notice something in the config.log about that:
/home/malachi/x-tools/armv6-rpi-linux-gnueabihf/bin/armv6-rpi-linux-gnueabihf-g++ -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/opt/vc/lib -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/usr/lib/armv6-rpi-linux-gnueabihf -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/lib/armv6-rpi-linux-gnueabihf -mfloat-abi=hard -Wl,-O1 -fuse-ld=gold -o freetype freetype.o -L/home/malachi/Projects/rpi/zero/sysroot/usr/lib/arm-linux-gnueabihf -lfreetype > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open /lib/arm-linux-gnueabihf/libc.so.6: No such file or directory > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open /usr/lib/arm-linux-gnueabihf/libc_nonshared.a: No such file or directory > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3: No such file or directory > ../sysdeps/arm/start.S:124: error: undefined reference to '__libc_start_main' > ../sysdeps/arm/start.S:128: error: undefined reference to 'abort' > ../sysdeps/arm/start.S:113: error: undefined reference to '__libc_csu_fini' > ../sysdeps/arm/start.S:120: error: undefined reference to '__libc_csu_init' > collect2: error: ld returned 1 exit status > Makefile:64: recipe for target 'freetype' failed > make: *** [freetype] Error 1 => source failed verification.
I seems the linker is looking for the raw target paths to find some libs, but of course on the cross-compiling host those paths aren't present. I had to specify "-no-gcc-sysroot" to get things to compile in general, is it possible that flag is causing a problem here?
I'm definitely specifying the -sysroot parameter...so this one surprised me
It's worth noting I'm using a crosstool-ng toolchain, targeting GCC 4.9 LINARO
-
Do you mean that you are using a self-built toolchain ?
-
@SGaist yes
ct-ng has an rpi preset, so I'm more or less using that
EDIT: If "no-gcc-sysroot" is not specified, we see:
/home/malachi/x-tools/armv6-rpi-linux-gnueabihf/bin/armv6-rpi-linux-gnueabihf-g++ -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/opt/vc/lib -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/usr/lib/armv6-rpi-linux-gnueabihf -Wl,-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/lib/armv6-rpi-linux-gnueabihf -mfloat-abi=hard --sysroot=/home/malachi/Projects/rpi/zero/sysroot -Wl,-O1 -fuse-ld=gold -o verifyspec verifyspec.o > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open crt1.o: No such file or directory > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open crti.o: No such file or directory > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot open crtn.o: No such file or directory > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot find -lstdc++ > /home/malachi/x-tools/armv6-rpi-linux-gnueabihf/lib/gcc/armv6-rpi-linux-gnueabihf/4.9.4/../../../../armv6-rpi-linux-gnueabihf/bin/ld.gold: error: cannot find -lm ...
The lines like:
-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/lib/armv6-rpi-linux-gnueabihf
are wrong. Should be
-rpath-link,/home/malachi/Projects/rpi/zero/sysroot/lib/arm-linux-gnueabihf
Is there an additional config option for me to specify this?
Strangely, even if I symlink an armv6-rpi-linux-gnueabihf folder into existence it still fails...
-
Why not use the Raspberry Pi provided toolchain ?
-
@SGaist Reason is, I don't know if it (the provided toolchain) will fully work within buildroot environment, which is where I want to end up eventually. That and for other projects, ct-ng has been working quite nicely.
That said, it is feeling like time to at least give the provided toolchain a shot
EDIT: So, using the provided toolchain (gcc-linaro-arm-linux-gnueabihf-raspbian-x64) faces issues compiling qtwebkit and qtwebengine modules (demands NEON code). Are these modules supported on ARMv6?
-
Had the same issue cross-compiling Qt 5.8 for the Pi 2. Turns out it was caused by having absolute links in libraries in the sysroot. I fixed the problem using the symlinks program. Use the following commands on the Pi to fix it before running configure on the host (much cleaner than the fixQualifiedLibraryPaths shell script suggested on several Pi sites):
mkdir ~/tmp
cd ~/tmp
git clone https://github.com/brandt/symlinks
cd symlinks
makeEdit Makefile (e.g. vi Makefile) and add the following variable definition:
INSTALL = /usr/bin/install
Save and then run these commands:
sudo mkdir /usr/man/man8
sudo make install
sudo symlinks -cr /usr/lib /lib -
Had the same issue cross-compiling Qt 5.8 for the Pi 2. Turns out it was caused by having absolute links in libraries in the sysroot. I fixed the problem using the symlinks program. Use the following commands on the Pi to fix it before running configure on the host (much cleaner than the fixQualifiedLibraryPaths shell script suggested on several Pi sites):
mkdir ~/tmp
cd ~/tmp
git clone https://github.com/brandt/symlinks
cd symlinks
makeEdit Makefile (e.g. vi Makefile) and add the following variable definition:
INSTALL = /usr/bin/install
Save and then run these commands:
sudo mkdir /usr/man/man8
sudo make install
sudo symlinks -cr /usr/lib /lib -
something can resolve the problem ?????