全志T7/T507 Qt5.12.5移植记录

1.概述
Qt5.12.5移植过程中遇到一些坑,特意记录下来。
主要包括编译、运行、环境配置三个部分。
2.编译配置
2.1.配置脚本
新建setenvs512.sh脚本,设置编译环境和选项,放入Qt源代码根目录。
示例:

#!/bin/sh

source //target/user_rootfs_misc/misc_config

if [ G N U E A B I < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = = < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g " > " g n u e a b i h f " < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ] < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > t h e n < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e c h o < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g " > " u p d a t e g + + " < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > c p < / s p a n > − r f < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > . . < / s p a n > / l i n u x − a r m − g n u e a b i − g + + / q t b a s e / m k s p e c s / < s p a n c l a s s = " t o k e n k e y w o r d " > f i < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > A W Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > Q t − 5.12.5 < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > A W Q T V E R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n n u m b e r " > 5.12 < / s p a n > . 5 < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > A W L I C H E E R O O T < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n e n v i r o n m e n t c o n s t a n t " > {GNUEABI}</span> <span class="token operator">==</span> <span class="token string">"gnueabihf"</span> <span class="token punctuation">]</span><span class="token punctuation">;</span><span class="token keyword">then</span> <span class="token builtin class-name">echo</span> <span class="token string">"update g++"</span> <span class="token function">cp</span> -rf <span class="token punctuation">..</span>/linux-arm-gnueabi-g++/ qtbase/mkspecs/ <span class="token keyword">fi</span> <span class="token assign-left variable">AW_QT_INSTALL_DIR</span><span class="token operator">=</span>Qt-5.12.5 <span class="token assign-left variable">AW_QT_VER</span><span class="token operator">=</span><span class="token number">5.12</span>.5 <span class="token builtin class-name">export</span> <span class="token assign-left variable">AW_LICHEE_ROOT</span><span class="token operator">=</span><span class="token environment constant"> GNUEABI</span><spanclass="tokenoperator">==</span><spanclass="tokenstring">"gnueabihf"</span><spanclass="tokenpunctuation">]</span><spanclass="tokenpunctuation">;</span><spanclass="tokenkeyword">then</span><spanclass="tokenbuiltinclassname">echo</span><spanclass="tokenstring">"updateg++"</span><spanclass="tokenfunction">cp</span>rf<spanclass="tokenpunctuation">..</span>/linuxarmgnueabig++/qtbase/mkspecs/<spanclass="tokenkeyword">fi</span><spanclass="tokenassignleftvariable">AWQTINSTALLDIR</span><spanclass="tokenoperator">=</span>Qt5.12.5<spanclass="tokenassignleftvariable">AWQTVER</span><spanclass="tokenoperator">=</span><spanclass="tokennumber">5.12</span>.5<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">AWLICHEEROOT</span><spanclass="tokenoperator">=</span><spanclass="tokenenvironmentconstant">PWD///
export QT_BUILD_ROOT= P W D < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > PWD</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">QT_INSTALL_DIR</span><span class="token operator">=</span><span class="token variable"> PWD</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QTINSTALLDIR</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">QT_BUILD_ROOT/ A W Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > < s p a n c l a s s = " t o k e n e n v i r o n m e n t c o n s t a n t " > P A T H < / s p a n > < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_QT_INSTALL_DIR</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token variable"> AWQTINSTALLDIR</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable"><spanclass="tokenenvironmentconstant">PATH</span></span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">AW_LICHEE_ROOT/out/ L I C H E E C H I P < / s p a n > / l i n u x / c o m m o n / b u i l d r o o t / h o s t / u s r / b i n / : < s p a n c l a s s = " t o k e n e n v i r o n m e n t c o n s t a n t " > {LICHEE_CHIP}</span>/linux/common/buildroot/host/usr/bin/:<span class="token environment constant"> LICHEECHIP</span>/linux/common/buildroot/host/usr/bin/:<spanclass="tokenenvironmentconstant">PATH
export SYSROOT= A W L I C H E E R O O T < / s p a n > / o u t / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/out/<span class="token variable"> AWLICHEEROOT</span>/out/<spanclass="tokenvariable">{LICHEE_CHIP}/linux/common/buildroot/host/usr/arm-buildroot-linux- G N U E A B I < / s p a n > / s y s r o o t < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > C R O S S C O M P I L E D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > {GNUEABI}</span>/sysroot <span class="token builtin class-name">export</span> <span class="token assign-left variable">CROSS_COMPILE_DIR</span><span class="token operator">=</span><span class="token variable"> GNUEABI</span>/sysroot<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">CROSSCOMPILEDIR</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">AW_LICHEE_ROOT/out/ L I C H E E C H I P < / s p a n > / l i n u x / c o m m o n / b u i l d r o o t / h o s t / o p t / e x t − t o o l c h a i n / b i n / < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > C R O S S C O M P I L E < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > {LICHEE_CHIP}</span>/linux/common/buildroot/host/opt/ext-toolchain/bin/ <span class="token builtin class-name">export</span> <span class="token assign-left variable">CROSS_COMPILE</span><span class="token operator">=</span><span class="token variable"> LICHEECHIP</span>/linux/common/buildroot/host/opt/exttoolchain/bin/<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">CROSSCOMPILE</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">CROSS_COMPILE_DIR/arm-linux- G N U E A B I < / s p a n > − < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > C P L U S I N C L U D E P A T H < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n e n v i r o n m e n t c o n s t a n t " > {GNUEABI}</span>- <span class="token builtin class-name">export</span> <span class="token assign-left variable">CPLUS_INCLUDE_PATH</span><span class="token operator">=</span><span class="token environment constant"> GNUEABI</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">CPLUSINCLUDEPATH</span><spanclass="tokenoperator">=</span><spanclass="tokenenvironmentconstant">PWD/qtbase/src/3rdparty/angle/include: C P L U S I N C L U D E P A T H < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q M A K E D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > CPLUS_INCLUDE_PATH</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">QMAKEDIR</span><span class="token operator">=</span><span class="token variable"> CPLUSINCLUDEPATH</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QMAKEDIR</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">QT_BUILD_ROOT/qmake
export PATH= C R O S S C O M P I L E D I R < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > : < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > CROSS_COMPILE_DIR</span><span class="token builtin class-name">:</span><span class="token variable"> CROSSCOMPILEDIR</span><spanclass="tokenbuiltinclassname">:</span><spanclass="tokenvariable">QT_INSTALL_DIR/bin:KaTeX parse error: Expected '}', got 'EOF' at end of input: …oken variable">QT_BUILD_ROOT
}
#-no-c++11
function makeconfig
{
cp A W L I C H E E R O O T < / s p a n > / t o o l s / p a c k / c h i p s / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/tools/pack/chips/<span class="token variable"> AWLICHEEROOT</span>/tools/pack/chips/<spanclass="tokenvariable">{LICHEE_CHIP}/hal/gpu/fbdev/lib/* S Y S R O O T < / s p a n > / l i b / − r f < s p a n c l a s s = " t o k e n f u n c t i o n " > m k d i r < / s p a n > − p < s p a n c l a s s = " t o k e n v a r i a b l e " > SYSROOT</span>/lib/ -rf <span class="token function">mkdir</span> -p <span class="token variable"> SYSROOT</span>/lib/rf<spanclass="tokenfunction">mkdir</span>p<spanclass="tokenvariable">QT_INSTALL_DIR

<span class="token variable">$QT_BUILD_ROOT</span>/configure <span class="token punctuation">\</span>
	-opensource <span class="token punctuation">\</span>
	-confirm-license <span class="token punctuation">\</span>
	-extprefix <span class="token variable">$QT_INSTALL_DIR</span> <span class="token punctuation">\</span>
	-R /usr/lib <span class="token punctuation">\</span>
	-no-strip <span class="token punctuation">\</span>
	-c++std c++11 <span class="token punctuation">\</span>
	-shared <span class="token punctuation">\</span>
	-nomake examples <span class="token punctuation">\</span>
	-accessibility <span class="token punctuation">\</span>
	-no-sql-db2 -no-sql-ibase -no-sql-mysql -no-sql-oci <span class="token punctuation">\</span>
	-no-sql-odbc -no-sql-psql -no-sql-sqlite2  -no-sql-tds <span class="token punctuation">\</span>
	-no-sql-sqlite -plugin-sql-sqlite <span class="token punctuation">\</span>
	-no-qml-debug <span class="token punctuation">\</span>
	-no-sse2 <span class="token punctuation">\</span>
	-no-sse3 <span class="token punctuation">\</span>
	-no-ssse3 <span class="token punctuation">\</span>
	-no-sse4.1 <span class="token punctuation">\</span>
	-no-sse4.2 <span class="token punctuation">\</span>
	-no-avx <span class="token punctuation">\</span>
	-no-avx2 <span class="token punctuation">\</span>
	-no-mips_dsp <span class="token punctuation">\</span>
	-no-mips_dspr2 <span class="token punctuation">\</span>
	-qt-zlib <span class="token punctuation">\</span>
	-no-journald <span class="token punctuation">\</span>
	-qt-libpng <span class="token punctuation">\</span>
	-qt-libjpeg <span class="token punctuation">\</span>
	-qt-freetype <span class="token punctuation">\</span>
	-qt-harfbuzz <span class="token punctuation">\</span>
	-no-openssl <span class="token punctuation">\</span>
	-no-xcb-xlib <span class="token punctuation">\</span>
	-no-glib <span class="token punctuation">\</span>
	-no-pulseaudio <span class="token punctuation">\</span>
	-alsa <span class="token punctuation">\</span>
	-gui <span class="token punctuation">\</span>
	-widgets <span class="token punctuation">\</span>
	-v <span class="token punctuation">\</span>
	-optimized-qmake <span class="token punctuation">\</span>
	-no-cups <span class="token punctuation">\</span>
	-no-iconv <span class="token punctuation">\</span>
	-evdev <span class="token punctuation">\</span>
	-no-icu <span class="token punctuation">\</span>
	-no-fontconfig <span class="token punctuation">\</span>
	-no-strip <span class="token punctuation">\</span>
	-pch <span class="token punctuation">\</span>
	-dbus <span class="token punctuation">\</span>
	-no-use-gold-linker <span class="token punctuation">\</span>
	-xplatform linux-arm-gnueabi-g++ <span class="token punctuation">\</span>
	-no-directfb <span class="token punctuation">\</span>
	-eglfs <span class="token punctuation">\</span>
	-qpa eglfs <span class="token punctuation">\</span>
	-linuxfb <span class="token punctuation">\</span>
	-no-kms <span class="token punctuation">\</span>
	-sysroot <span class="token variable">$SYSROOT</span> <span class="token punctuation">\</span>
	-opengl es2 <span class="token punctuation">\</span>
	-no-system-proxies <span class="token punctuation">\</span>
	-no-slog2 <span class="token punctuation">\</span>
	-no-pps <span class="token punctuation">\</span>
	-no-imf <span class="token punctuation">\</span>
	-no-lgmon <span class="token punctuation">\</span>
	-tslib <span class="token punctuation">\</span>
	-device-option <span class="token assign-left variable">CROSS_COMPILE</span><span class="token operator">=</span><span class="token variable">$CROSS_COMPILE</span>
<span class="token function">sed</span> -i <span class="token string">'/^QMAKE_LIBS_OPENGL_ES2*/d'</span> qtbase/src/gui/qtgui-config.pri
<span class="token function">sed</span> -i <span class="token string">'/^QMAKE_LIBS_EGL*/d'</span> qtbase/src/gui/qtgui-config.pri

}

function makeall
{
sed -i ‘/^QMAKE_LIBS_OPENGL_ES2*/d’ qtbase/src/gui/qtgui-config.pri
sed -i ‘/^QMAKE_LIBS_EGL*/d’ qtbase/src/gui/qtgui-config.pri
make -j 32 -C $QT_BUILD_ROOT
}

function makeinstall
{
make -C Q T B U I L D R O O T < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > i n s t a l l < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > l o c a l < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T T A R G E T I N S T A L L < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_BUILD_ROOT</span> <span class="token function">install</span> <span class="token builtin class-name">local</span> <span class="token assign-left variable">QT_TARGET_INSTALL</span><span class="token operator">=</span><span class="token variable"> QTBUILDROOT</span><spanclass="tokenfunction">install</span><spanclass="tokenbuiltinclassname">local</span><spanclass="tokenassignleftvariable">QTTARGETINSTALL</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">AW_LICHEE_ROOT/out/ L I C H E E C H I P < / s p a n > / l i n u x / c o m m o n / b u i l d r o o t / t a r g e t / u s r / l o c a l / < s p a n c l a s s = " t o k e n v a r i a b l e " > {LICHEE_CHIP}</span>/linux/common/buildroot/target/usr/local/<span class="token variable"> LICHEECHIP</span>/linux/common/buildroot/target/usr/local/<spanclass="tokenvariable">AW_QT_INSTALL_DIR
mkdir -p KaTeX parse error: Undefined control sequence: \< at position 102: …n punctuation">\̲<̲/span> <span c…QT_INSTALL_DIR/lib Q T I N S T A L L D I R < / s p a n > / p l u g i n s < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_INSTALL_DIR</span>/plugins <span class="token variable"> QTINSTALLDIR</span>/plugins<spanclass="tokenvariable">QT_INSTALL_DIR/qml </span>
Q T I N S T A L L D I R < / s p a n > / t r a n s l a t i o n s < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_INSTALL_DIR</span>/translations <span class="token variable"> QTINSTALLDIR</span>/translations<spanclass="tokenvariable">QT_TARGET_INSTALL
cp A W L I C H E E R O O T < / s p a n > / t o o l s / p a c k / c h i p s / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/tools/pack/chips/<span class="token variable"> AWLICHEEROOT</span>/tools/pack/chips/<spanclass="tokenvariable">{LICHEE_CHIP}/hal/gpu/fbdev/lib/* A W L I C H E E R O O T < / s p a n > / o u t / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/out/<span class="token variable"> AWLICHEEROOT</span>/out/<spanclass="tokenvariable">{LICHEE_CHIP}/linux/common/buildroot/target/usr/lib/ -rf
cp A W L I C H E E R O O T < / s p a n > / t o o l s / p a c k / c h i p s / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/tools/pack/chips/<span class="token variable"> AWLICHEEROOT</span>/tools/pack/chips/<spanclass="tokenvariable">{LICHEE_CHIP}/hal/gpu/fbdev/bin/* A W L I C H E E R O O T < / s p a n > / o u t / < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_LICHEE_ROOT</span>/out/<span class="token variable"> AWLICHEEROOT</span>/out/<spanclass="tokenvariable">{LICHEE_CHIP}/linux/common/buildroot/target/bin/ -rf
}

function makecleanall
{
cd Q T B U I L D R O O T < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > m a k e < / s p a n > d i s t c l e a n < s p a n c l a s s = " t o k e n f u n c t i o n " > m a k e < / s p a n > − C < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_BUILD_ROOT</span> <span class="token function">make</span> distclean <span class="token function">make</span> -C <span class="token variable"> QTBUILDROOT</span><spanclass="tokenfunction">make</span>distclean<spanclass="tokenfunction">make</span>C<spanclass="tokenvariable">QT_BUILD_ROOT clean
rm -rf Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n f u n c t i o n " > r m < / s p a n > − r f < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_INSTALL_DIR</span> <span class="token function">rm</span> -rf <span class="token variable"> QTINSTALLDIR</span><spanclass="tokenfunction">rm</span>rf<spanclass="tokenvariable">AW_LICHEE_ROOT/out/ L I C H E E C H I P < / s p a n > / l i n u x / c o m m o n / b u i l d r o o t / t a r g e t / u s r / l o c a l / < s p a n c l a s s = " t o k e n v a r i a b l e " > {LICHEE_CHIP}</span>/linux/common/buildroot/target/usr/local/<span class="token variable"> LICHEECHIP</span>/linux/common/buildroot/target/usr/local/<spanclass="tokenvariable">AW_QT_INSTALL_DIR
}

之后会在:

$AW_LICHEE_ROOT/out/${LICHEE_CHIP}/linux/common/buildroot/target/usr/local/$AW_QT_INSTALL_DIR

 
 
  • 1

目录安装QT库文件。

2.5.应用编译
buildroot-201611\target\user_rootfs_build.sh脚本:

1.检测QT版本是否被设置,确认有设置后才往下编译QT应用。否则代表不编译QT。

if [ ! -n "$AWQT_VERSION" ]; then
 echo "error,AWQT_VERSION is empty"
 exit 0
fi

2.检测QT库是否被正常编译安装:

if [ -d "${LICHEE_BR_DIR}/dl/qt-everywhere-opensource-src-${AWQT_VERSION}/Qt-${AWQT_VERSION}/bin/" ];then
(
if [ -d "${USR_TARGET_DIR}/usr/local/Qt-${AWQT_VERSION}/lib" ]; then
#    cp -rf ${USER_MISC}/sdk/fonts ${USR_TARGET_DIR}/usr/local/Qt-5.9.0/lib/
	(cd ${USR_TARGET_DIR}/usr/local/Qt-${AWQT_VERSION}/lib
	rm *.a *.la 
	rm cmake -rf
	)
fi
)
else
echo "you must compile QT${AWQT_VERSION} first!!!!!!!"
sleep 2
fi

3.misc_config
misc_config中设定的AWQT_VERSION版本,是为QT应用编译时使用。
否则退出comp_qtLib-512_only.sh后,AWQT_VERSION失效,无法单独编译QT应用。

3.运行配置
新建:buildroot-201611\target\user_rootfs_extra\qt5.12.sh

export  QTDIR=/usr/local/Qt-5.12.5/
export  QT_ROOT=$QTDIR
export  PATH=$QTDIR/bin:$PATH

export LD_LIBRARY_PATH= Q T D I R < / s p a n > / l i b : / u s r / l i b / c e d a r x / : < s p a n c l a s s = " t o k e n v a r i a b l e " > QTDIR</span>/lib:/usr/lib/cedarx/:<span class="token variable"> QTDIR</span>/lib:/usr/lib/cedarx/:<spanclass="tokenvariable">LD_LIBRARY_PATH

export QT_QPA_PLATFORM_PLUGIN_PATH= Q T R O O T < / s p a n > / p l u g i n s < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T Q P A P L A T F O R M < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > l i n u x f b : t t y < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > / d e v / f b 0 < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T Q P A F O N T D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > QT_ROOT</span>/plugins <span class="token builtin class-name">export</span> <span class="token assign-left variable">QT_QPA_PLATFORM</span><span class="token operator">=</span>linuxfb:tty<span class="token operator">=</span>/dev/fb0 <span class="token builtin class-name">export</span> <span class="token assign-left variable">QT_QPA_FONTDIR</span><span class="token operator">=</span><span class="token variable"> QTROOT</span>/plugins<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QTQPAPLATFORM</span><spanclass="tokenoperator">=</span>linuxfb:tty<spanclass="tokenoperator">=</span>/dev/fb0<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QTQPAFONTDIR</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">QT_ROOT/lib/fonts
#export LD_PRELOAD=/usr/lib/libts.so
#/usr/lib/preloadable_libiconv.so:

TouchDevice=gslX680
for InputDevices in /sys/class/input/input*
do
DeviceName=</span><span class="token function">cat</span> $InputDevices/name<span class="token variable">
#echo I n p u t D e v i c e s n a m e : InputDevices name: InputDevicesname:DeviceName
if [ D e v i c e N a m e < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > DeviceName</span> <span class="token operator">==</span> <span class="token variable"> DeviceName</span><spanclass="tokenoperator">==</span><spanclass="tokenvariable">TouchDevice ];then
TouchDeviceNum=KaTeX parse error: Expected '}', got '#' at position 43: …oken operator">#̲#</span>*input}…TouchDeviceNum
echo "add “/dev/input/event T o u c h D e v i c e N u m < / s p a n > < s p a n c l a s s = " t o k e n s t r i n g " > " t o Q t A p p l i c a t i o n . " < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > b r e a k < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > f i < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > d o n e < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > i f < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > [ < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > ! < / s p a n > − n < s p a n c l a s s = " t o k e n s t r i n g " > " < s p a n c l a s s = " t o k e n v a r i a b l e " > TouchDeviceNum</span> <span class="token string">"to Qt Application."</span> <span class="token builtin class-name">break</span> <span class="token keyword">fi</span> <span class="token keyword">done</span> <span class="token keyword">if</span> <span class="token punctuation">[</span> <span class="token operator">!</span> -n <span class="token string">"<span class="token variable"> TouchDeviceNum</span><spanclass="tokenstring">"toQtApplication."</span><spanclass="tokenbuiltinclassname">break</span><spanclass="tokenkeyword">fi</span><spanclass="tokenkeyword">done</span><spanclass="tokenkeyword">if</span><spanclass="tokenpunctuation">[</span><spanclass="tokenoperator">!</span>n<spanclass="tokenstring">"<spanclass="tokenvariable">TouchDeviceNum]; then
echo “Error:Input device $TouchDevice can not be found,plz check it!”
fi

export QT_QPA_PLATFORM=eglfs
#export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_GENERIC_PLUGINS=evdevtouch
export QT_QPA_EGLFS_INTEGRATION=eglfs_mali
#export QT_QPA_FB_HIDECURSOR=1
#export QT_QPA_EGLFS_HIDECURSOR=1
#export QT_QPA_EGLFS_ROTATION=90
export QWS_MOUSE_PROTO=
export DBUS_SESSION_BUS_ADDRESS=</span><span class="token function">cat</span> /tmp/dbusaddr<span class="token variable">

开机后,先运行该脚本,再启动应用。
4.问题记录
4.1.新电脑常见:在全新环境中QT编译失败
编译后没有Qt库和相关应用。
手动进入buildroot-201611/dl/qt-everywhere-opensource-src-XXX目录,运行. ./setenvs597.sh,之后运行makeconfig,出现如下提示:

cc1plus: error: unrecognized command line option "-std=c++11"
make: *** [project.o] Error 1

 
 
  • 1
  • 2

该问题为本地gcc(注意是本地gcc,不是交叉编译链)版本不对,请确保编译服务器gcc在4.8以上。
l

inux01@Exdroid11:~$ gcc --version
gcc (Ubuntu/Linaro 4.4.7-8ubuntu1) 4.4.7
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

此时请重新配置gcc,将其指向新版本:

/home/other/gcc/g++ -> /usr/bin/g++-4.8
/home/other/gcc/gcc -> /usr/bin/gcc-4.8

配置新版本的gcc和g++,导出变量:

export PATH=/home/other/gcc/:$PATH

4.2. 编译配置报错

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

 
 
  • 1
  • 2
  • 3

qtbase\mkspecs\linux-arm-gnueabi-g++\qmake.conf 添加以下定义:

QMAKE_CFLAGS QMAKE_CXXFLAGS QMAKE_INCDIR_OPENGL_ES2 QMAKE_LIBDIR_OPENGL_ES2 QMAKE_LIBS_OPENGL_ES2

4.3.Egl报错

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

用t7linux-auto\tools\pack\chips\sun8iw17p1\hal\gpu\fbdev\include\EGL,将qtbase\src\3rdparty\angle\include\EGL中文件替换。
包含eglplatform.h这些新增文件。
如果没有设置正确,EGL检测会失败,在配置结果上面可以看到EGL和EGLFS没有设置正确,无法生成Makefile。

...
test config.qtbase_gui.libraries.egl FAILED
...
  EGL .................................... no
  OpenVG ................................. no
  OpenGL:
    Desktop OpenGL ....................... no
    OpenGL ES 2.0 ........................ yes
    OpenGL ES 3.0 ........................ no
    OpenGL ES 3.1 ........................ no
    OpenGL ES 3.2 ........................ no

4.4.libGLESv2.so运行路径错误
运行应用提示:

error while loading shared libraries: /home/XXX/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so 
: cannot open shared object file: No such file or directory

查看程序依赖库libGLESv2.so携带了编译路径:

:readelf -d demo

Dynamic section at offset 0x49640 contains 35 entries:
标记 类型 名称/值
0x00000001 (NEEDED) 共享库:[libQt5Widgets.so.5]
0x00000001 (NEEDED) 共享库:[libQt5Gui.so.5]
0x00000001 (NEEDED) 共享库:[libQt5Core.so.5]
0x00000001 (NEEDED) 共享库:[/home/XXX/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so]

qtbase/src/gui/qtgui-config.pri文件中被赋值了路径,没有找到配置点,于是手动删除对应变量。

sed -i '/^QMAKE_LIBS_OPENGL_ES2*/d' qtbase/src/gui/qtgui-config.pri
	sed -i '/^QMAKE_LIBS_EGL*/d' qtbase/src/gui/qtgui-config.pri

该问题卡住了很久,详细处理过程:
1.将libGLESv2放入QT源文件Lib,之后再编译,查看是否带路径。

带路径

2.在QMAKE_LIBDIR_OPENGL_ES2之前添加-L,在查看是都带路径。
提示报错

3.只更换EGL头文件,不添加OPENGL_ES2路径,失败。
自动携带
/home/aero/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so
一样运行报错。

4.修改makefile

LIBS          = $(SUBLIBS) /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qttools/lib/libQt5UiTools.a /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Widgets.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Gui.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Core.so /home/aero/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so -lpthread   

 
 
  • 1

修改为:

LIBS          = $(SUBLIBS) /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qttools/lib/libQt5UiTools.a /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Widgets.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Gui.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Core.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libGLESv2.so -lpthread   

并将libGLESv2.so拷贝到对应目录。
编译后一样报错。

5.修改Makefile

LIBS          = $(SUBLIBS) /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qttools/lib/libQt5UiTools.a /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Widgets.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Gui.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Core.so /home/aero/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so -lpthread   

 
 
  • 1

修改为:

LIBS          = $(SUBLIBS) /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qttools/lib/libQt5UiTools.a /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Widgets.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Gui.so /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/libQt5Core.so   -L/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-include-only/qtbase/lib/ -lGLESv2   

 
 
  • 1

编译后ok:

Dynamic section at offset 0x49640 contains 34 entries:
  标记        类型                         名称/值
 0x00000001 (NEEDED)                     共享库:[libQt5Widgets.so.5]
 0x00000001 (NEEDED)                     共享库:[libQt5Gui.so.5]
 0x00000001 (NEEDED)                     共享库:[libQt5Core.so.5]
 0x00000001 (NEEDED)                     共享库:[libGLESv2.so]
 0x00000001 (NEEDED)                     共享库:[libstdc++.so.6]
 0x00000001 (NEEDED)                     共享库:[libm.so.6]
 0x00000001 (NEEDED)                     共享库:[libgcc_s.so.1]
 0x00000001 (NEEDED)                     共享库:[libc.so.6]

据此,修改qtbase\mkspecs\linux-arm-gnueabi-g++\qmake.conf:

QMAKE_INCDIR_OPENGL_ES2 += $$PWD/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/include
QMAKE_LIBDIR_OPENGL_ES2 += $$PWD/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib
QMAKE_LIBS_OPENGL_ES2 += -L$$QMAKE_LIBDIR_OPENGL_ES2 -lGLESv2

6.按照以上修改,config不过,提示没有—L…路径:

 arm-linux-gnueabi-g++: error: _-L/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-set-path1-2/qtbase/mkspecs/linux-arm-gnueabi-g++/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib: No such file or directory
 make: *** [opengl_es2] 错误 1

 
 
  • 1
  • 2

7.在-L之后添加空格,隔开:

和上面一样,提示找不到 —-L,

'QMAKE_LIBS_OPENGL_ES2 = /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-add-L/qtbase/mkspecs/linux-arm-gnueabi-g++/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib/libGLESv2.so _-L /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-add-L/qtbase/mkspecs/linux-arm-gnueabi-g++/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-add-L/qtbase/mkspecs/linux-arm-gnueabi-g++/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib/libGLESv2.so'

> arm-linux-gnueabi-g++: error: _-L: No such file or directory
> make: *** [opengl_es2] 错误 1

8.可以看到上面的变量时是有累加的,尝试将其写死

QMAKE_LIBS_OPENGL_ES2 = -lGLESv2

 
 
  • 1

makeconfig之后,一样会有

QMAKE_LIBS_OPENGL_ES2 = /home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-fixed-eglLib/qtbase/mkspecs/linux-arm-gnueabi-g++/../../../../../../tools/pack/chips/sun8iw17p1/hal/gpu/fbdev/lib/libGLESv2.so'

 
 
  • 1

9.在8的基础上,只写QMAKE_LIBS_OPENGL_ES2,将其余清零:

QMAKE_INCDIR_OPENGL_ES2 = 
QMAKE_LIBDIR_OPENGL_ES2 = 
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2

 
 
  • 1
  • 2
  • 3

一样不行。

10.用引号括住,看看是否携带路径:

QMAKE_LIBS_OPENGL_ES2 = “-lGLESv2”

‘QMAKE_LIBS_OPENGL_ES2 = /home/aero/t7linux-auto/out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libGLESv2.so’

一样不行。

11.对与Makefile的总结:
只要携带了路径,就会编译进代码。

12.使用-rpath

QMAKE_LIBS_OPENGL_ES2 = "-rpath /usr/lib -lGLESv2"
'QMAKE_LIBS_OPENGL_ES2 = "-rpath /usr/lib -lGLESv2"' 


arm-linux-gnueabi-g++ -c -pipe -mfpu=neon -marm -mcpu=cortex-a7 --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-rpath/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-rpath/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot -O2 -std=gnu++11 -w -fPIC  -I. -I/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-rpath/qtbase/mkspecs/linux-arm-gnueabi-g++ -o main.o main.cpp
> arm-linux-gnueabi-g++ --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-rpath/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-rpath/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot -Wl,-O1 -o opengl_es2 main.o   -rpath\ /usr/lib\ -lGLESv2   
> arm-linux-gnueabi-g++: error: unrecognized command line option '-rpath /usr/lib -lGLESv2'
> make: *** [opengl_es2] 错误 1
 => source failed verification.
test config.qtbase_gui.libraries.opengl_es2 FAILED


13.在-l前面加上空格

'QMAKE_LIBS_OPENGL_ES2 = " -lGLESv2 "' 
> arm-linux-gnueabi-g++ --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-l/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot --sysroot=/home/aero/t7linux-auto/buildroot-201611/dl/qt-everywhere-src-5.12.5-l/../../../out/sun8iw17p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot -Wl,-O1 -o opengl_es2 main.o   \ -lGLESv2\    
> arm-linux-gnueabi-g++: error:  -lGLESv2 : No such file or directory

14.查找赋值路径

搜索到QMAKE_LIBS_OPENGL_ES2在qtbase/src/gui/qtgui-config.pri文件中被赋值了路径。
对比5.9.7是没有的。因此config之后删除相关变量:

sed -i '/^QMAKE_LIBS_OPENGL_ES2*/d' qtbase/src/gui/qtgui-config.pri
sed -i '/^QMAKE_LIBS_EGL*/d' qtbase/src/gui/qtgui-config.pri

测试ok。

4.5.触屏不灵
驱动变更,导致buildroot-201611\target\user_rootfs_extra\qt5.12.shQT触摸参数失效:

if [ -e "/dev/input/event3" ]; then
#       export QWS_MOUSE_PROTO="Tslib:/dev/input/event4"
#	export TSLIB_TSDEVICE=/dev/input/event4
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event3

fi

以上在/dev/input/event3时有效,当设备变更时,导致/dev/input/event3不存在,因此失败。
修改对应脚本:

TouchDevice=gslX680
for InputDevices in /sys/class/input/input*
do
    DeviceName=`cat $InputDevices/name`
    #echo $InputDevices name:$DeviceName
    if [ $DeviceName == $TouchDevice ];then
	   TouchDeviceNum=${InputDevices##*input}
	   export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event$TouchDeviceNum
	   echo "add "/dev/input/event$TouchDeviceNum "to Qt Application."
	   break
	fi
done
if [ ! -n "$TouchDeviceNum" ]; then
 echo "Error:Input device $TouchDevice can not be found,plz check it!"
fi

4.6.Qt5.125新增:运行出现ShareOpenGLContexts警告

Attribute Qt::AA_ShareOpenGLContexts must be set before QCoreApplication is created.
 

在新版的代码中,Qt加入了设置选项的检查,如果ShareOpenGLContexts 设置在应用运行之后,就会出现警告,**部分代码为新增:

void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on)
{
    if (on)
        QCoreApplicationPrivate::attribs |= 1 << attribute;
    else
        QCoreApplicationPrivate::attribs &= ~(1 << attribute);
/*#if defined(QT_NO_QOBJECT)
    if (Q_UNLIKELY(qApp)) {
#else
    if (Q_UNLIKELY(QCoreApplicationPrivate::is_app_running)) {
#endif
        switch (attribute) {
            case Qt::AA_EnableHighDpiScaling:
            case Qt::AA_DisableHighDpiScaling:
            case Qt::AA_PluginApplication:
            case Qt::AA_UseDesktopOpenGL:
            case Qt::AA_UseOpenGLES:
            case Qt::AA_UseSoftwareOpenGL:
            case Qt::AA_ShareOpenGLContexts:
#ifdef QT_BOOTSTRAPPED
                qWarning("Attribute %d must be set before QCoreApplication is created.",
                         attribute);
#else
                qWarning("Attribute Qt::%s must be set before QCoreApplication is created.",
                         QMetaEnum::fromType<Qt::ApplicationAttribute>().valueToKey(attribute));
#endif
                break;
            default:
                break;
        }*/
    }
}

处理方法:
修改应用代码,在QCoreApplication之前,调用:
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);

5.error “Qt requires C++11 support”

5.1.Qt编译报错:

…/…/…/include/QtCore/…/…/src/corelib/global/qglobal.h:1172:1:
warning: identifier ‘nullptr’ is a keyword in C++11 [-Wc++0x-compat]
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName,
bool *ok=nullptr) Q_DECL_NOEXCEPT; ^ In file included from
…/…/…/include/QtCore/qbasicatomic.h:1:0,
from …/…/…/include/QtCore/…/…/src/corelib/thread/qatomic.h:46,
from …/…/…/include/QtCore/qatomic.h:1,
from …/…/…/include/QtCore/…/…/src/corelib/global/qglobal.h:1210,
from …/…/…/include/QtCore/qglobal.h:1,
from …/…/…/include/QtGui/…/…/src/gui/kernel/qtguiglobal.h:43,
from …/…/…/include/QtGui/qtguiglobal.h:1,
from …/…/…/include/QtWidgets/…/…/src/widgets/kernel/qtwidgetsglobal.h:43,
from …/…/…/include/QtWidgets/qtwidgetsglobal.h:1,
from …/…/…/include/QtWidgets/…/…/src/widgets/kernel/qapplication.h:43,
from …/…/…/include/QtWidgets/qapplication.h:1,
from …/…/…/include/QtWidgets/QApplication:1,
from main.cpp:51: …/…/…/include/QtCore/…/…/src/corelib/thread/qbasicatomic.h:61:4:
error: #error “Qt requires C++11 support” # error “Qt requires C++11
support”

5.2.处理方法1

单个模组可以直接修改pro:

QMAKE_CXXFLAGS += -std=c++11

1
或者直接修改makefile:

CFLAGS        += -std=c++11 
CXXFLAGS      += -std=c++11

          
          
  • 1
  • 2

5.3.处理方法2

交叉编译配置添加:

qt\qt-everywhere-src-5.12.5\qtbase\mkspecs\linux-aarch64-gnu-g++\qmake.conf

QMAKE_CFLAGS +=-std=c++11
QMAKE_CXXFLAGS +=-std=c++11

修改qmake.conf之后,不需要重新交叉编译Qt库,直接make就可以自动更新这些参数。

6.GPU问题
6.1.GPU测试
Gpu测试程序sunxi_gpu_test,编译:

export PATH=/home/aero/t564/longan/out/gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu/bin:$PATH
make CROSS_COMPILE=aarch64-linux-gnu- BUILD=debug  

生成sunxi_gpu_test\out\fbdev-debug-aarch64-linux-gnu-\bin\sunxi_gpu_test
推送至目标平台。
mali-bifrost\fbdev\mali-g31\aarch64-linux-gnu\lib 相关库文件推送至目标平台。

运行sunxi_gpu_test,提示报错。
原因为:

devtmpfs on /dev type devtmpfs (rw,nosuid,relatime,size=427848k,nr_inodes=106962,mode=755)

 
 
  • 1

挂载不成功。

qtbase\mkspecs\linux-arm-gnueabi-g++\qmake.conf 添加以下定义:

QMAKE_CFLAGS +=-DEGL_FBDEV
QMAKE_CXXFLAGS +=-DEGL_FBDEV

# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_NM = aarch64-linux-gnu-nm -P
QMAKE_STRIP = aarch64-linux-gnu-strip
QMAKE_INCDIR_OPENGL_ES2 += < / s p a n > Q T G P U I N C Q M A K E L I B D I R O P E N G L E S 2 < s p a n c l a s s = " t o k e n o p e r a t o r " > + = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > </span>QT_GPU_INC QMAKE_LIBDIR_OPENGL_ES2 <span class="token operator">+=</span> <span class="token variable"> </span>QTGPUINCQMAKELIBDIROPENGLES2<spanclass="tokenoperator">+=</span><spanclass="tokenvariable">QT_GPU_LIB
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2
load(qt_config)

7.1.更换EGL头文件
用gpu_um_pub\mali-bifrost\fbdev\include\EGL,将qtbase\src\3rdparty\angle\include\EGL中头文件替换。
7.2.配置编译参数

AW_QT_INSTALL_DIR=Qt-5.12.5

PWD=</span><span class="token builtin class-name">pwd</span><span class="token variable">

export QT_BUILD_ROOT= P W D < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > PWD</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">QT_INSTALL_DIR</span><span class="token operator">=</span><span class="token variable"> PWD</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QTINSTALLDIR</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">LICHEE_TOP_DIR/platform/framework/sdk_lib/ A W Q T I N S T A L L D I R < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T G P U L I B < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > AW_QT_INSTALL_DIR</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">QT_GPU_LIB</span><span class="token operator">=</span><span class="token variable"> AWQTINSTALLDIR</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">QTGPULIB</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">LICHEE_TOP_DIR/platform/core/graphics/gpu_um_pub/mali-bifrost/fbdev/mali-g31/aarch64-linux-gnu/lib
export QT_GPU_INC= L I C H E E T O P D I R < / s p a n > / p l a t f o r m / c o r e / g r a p h i c s / g p u u m p u b / m a l i − b i f r o s t / i n c l u d e < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > Q T T A R G E T I N S T A L L < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > LICHEE_TOP_DIR</span>/platform/core/graphics/gpu_um_pub/mali-bifrost/include <span class="token assign-left variable">QT_TARGET_INSTALL</span><span class="token operator">=</span><span class="token variable"> LICHEETOPDIR</span>/platform/core/graphics/gpuumpub/malibifrost/include<spanclass="tokenassignleftvariable">QTTARGETINSTALL</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">LICHEE_BR_OUT/target/usr/local/$AW_QT_INSTALL_DIR

#### acturly use
export SYSROOT= L I C H E E T O P D I R < / s p a n > / o u t / t 507 / d e m o 2.0 / l o n g a n / b u i l d r o o t / h o s t / u s r / a a r c h 64 − b u i l d r o o t − l i n u x − g n u / s y s r o o t < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > < s p a n c l a s s = " t o k e n e n v i r o n m e n t c o n s t a n t " > P A T H < / s p a n > < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > LICHEE_TOP_DIR</span>/out/t507/demo2.0/longan/buildroot/host/usr/aarch64-buildroot-linux-gnu/sysroot <span class="token builtin class-name">export</span> <span class="token assign-left variable"><span class="token environment constant">PATH</span></span><span class="token operator">=</span><span class="token variable"> LICHEETOPDIR</span>/out/t507/demo2.0/longan/buildroot/host/usr/aarch64buildrootlinuxgnu/sysroot<spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable"><spanclass="tokenenvironmentconstant">PATH</span></span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">LICHEE_BR_OUT/host/bin/: P A T H < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > C R O S S C O M P I L E < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > PATH</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">CROSS_COMPILE</span><span class="token operator">=</span><span class="token variable"> PATH</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">CROSSCOMPILE</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">LICHEE_TOP_DIR/out/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
export CPLUS_INCLUDE_PATH= P W D < / s p a n > / q t b a s e / s r c / 3 r d p a r t y / a n g l e / i n c l u d e : < s p a n c l a s s = " t o k e n v a r i a b l e " > PWD</span>/qtbase/src/3rdparty/angle/include:<span class="token variable"> PWD</span>/qtbase/src/3rdparty/angle/include:<spanclass="tokenvariable">CPLUS_INCLUDE_PATH

HOST=aarch64-linux-gnu

OUT_GCC=</span><span class="token function">find</span> $<span class="token punctuation">{<!-- --></span>LICHEE_BR_OUT<span class="token punctuation">}</span> -perm /a+x -a -regex <span class="token string">'.*-gcc'</span><span class="token variable">
OUT_CPP=</span><span class="token function">find</span> $<span class="token punctuation">{<!-- --></span>LICHEE_BR_OUT<span class="token punctuation">}</span> -perm /a+x -a -regex <span class="token string">'.*-g\+\+'</span><span class="token variable">

export CC= O U T G C C < / s p a n > < s p a n c l a s s = " t o k e n b u i l t i n c l a s s − n a m e " > e x p o r t < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > C X X < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > OUT_GCC</span> <span class="token builtin class-name">export</span> <span class="token assign-left variable">CXX</span><span class="token operator">=</span><span class="token variable"> OUTGCC</span><spanclass="tokenbuiltinclassname">export</span><spanclass="tokenassignleftvariable">CXX</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">OUT_GCC

cpu_cores=</span><span class="token function">cat</span> /proc/cpuinfo <span class="token operator">|</span> <span class="token function">grep</span> <span class="token string">"processor"</span> <span class="token operator">|</span> <span class="token function">wc</span> -l<span class="token variable">
if [ c p u c o r e s < / s p a n > − l e < s p a n c l a s s = " t o k e n n u m b e r " > 8 < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ] < / s p a n > < s p a n c l a s s = " t o k e n p u n c t u a t i o n " > ; < / s p a n > < s p a n c l a s s = " t o k e n k e y w o r d " > t h e n < / s p a n > < s p a n c l a s s = " t o k e n a s s i g n − l e f t v a r i a b l e " > L I C H E E J L E V E L < / s p a n > < s p a n c l a s s = " t o k e n o p e r a t o r " > = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > {cpu_cores}</span> -le <span class="token number">8</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token keyword">then</span> <span class="token assign-left variable">LICHEE_JLEVEL</span><span class="token operator">=</span><span class="token variable"> cpucores</span>le<spanclass="tokennumber">8</span><spanclass="tokenpunctuation">]</span><spanclass="tokenpunctuation">;</span><spanclass="tokenkeyword">then</span><spanclass="tokenassignleftvariable">LICHEEJLEVEL</span><spanclass="tokenoperator">=</span><spanclass="tokenvariable">{cpu_cores}
else
LICHEE_JLEVEL=${cpu_cores}
fi

env

function cqtroot
{
cd KaTeX parse error: Expected 'EOF', got '}' at position 54: …n punctuation">}̲</span> <span c…QT_GPU_LIB/* S Y S R O O T < / s p a n > / l i b / − r f < s p a n c l a s s = " t o k e n f u n c t i o n " > m k d i r < / s p a n > − p < s p a n c l a s s = " t o k e n v a r i a b l e " > SYSROOT</span>/lib/ -rf <span class="token function">mkdir</span> -p <span class="token variable"> SYSROOT</span>/lib/rf<spanclass="tokenfunction">mkdir</span>p<spanclass="tokenvariable">QT_INSTALL_DIR

<span class="token variable">$QT_BUILD_ROOT</span>/configure <span class="token punctuation">\</span>
	-opensource <span class="token punctuation">\</span>
	-confirm-license <span class="token punctuation">\</span>
	-extprefix <span class="token variable">$QT_INSTALL_DIR</span> <span class="token punctuation">\</span>
	-sysroot <span class="token variable">$SYSROOT</span> <span class="token punctuation">\</span>
	-xplatform linux-aarch64-gnu-g++ <span class="token punctuation">\</span>
	-device-option <span class="token assign-left variable">CROSS_COMPILE</span><span class="token operator">=</span><span class="token variable">$CROSS_COMPILE</span> <span class="token punctuation">\</span>

153);">50

  • 51
  • 52
  • 8.问题记录
    8.1.GPU文件链接
    需要将所有库文件最终指向mali.so。
    8.2.新增头文件
    QT需要读取\fbdev_window.h文件,需要创建一个头文件放在对应目录。否则编译不含mali egl选项,运行会报错。

    9.eglfs_mali unsupport
    QT移植到T5芯片,生成应用程序运行报错:

    > /analogclock qt.qpa.egldeviceintegration: Failed to load EGL device
    > integration "eglfs_mali" EGL library doesn't support Emulator
    > extensions Aborted
    
     
     
    • 1
    • 2
    • 3

    9.1.按照网络搜索,设置:

    export QT_QPA_EGLFS_INTEGRATION=none
    

    无效
    9.2.设置

    export QT_QPA_EGLFS_INTEGRATION=eglfs_mali
    

    无效
    9.3.查看配置发现egl有错误:

    QPA backends:
      DirectFB ............................... no
      EGLFS .................................. yes
      EGLFS details:
        EGLFS OpenWFD ........................ no
        EGLFS i.Mx6 .......................... no
        EGLFS i.Mx6 Wayland .................. no
        EGLFS RCAR ........................... no
        EGLFS EGLDevice ...................... no
        EGLFS GBM ............................ no
        EGLFS VSP2 ........................... no
        EGLFS Mali ........................... no
        EGLFS Raspberry Pi ................... no
        EGLFS X11 ............................ no
      LinuxFB ................................ yes
      VNC .................................... yes
      Mir client ............................. no
    

    这里EGLFS Mali … no是不正常的。

    9.3.1.追溯配置错误:

    Checking for Mali EGL…

    qt-everywhere-src-5.12.5-2/config.tests/egl-mali:
    qtbase/mkspecs/linux-aarch64-gnu-g++ -o main.o main.cpp
    main.cpp:2:10: fatal error: EGL/fbdev_window.h:没有那个文件或目录
    #include <EGL/fbdev_window.h>
    ^~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    make: *** [main.o] 错误 1

    这里需要fbdev_window.h,没找到。
    9.3.2.添加fbdev_window.h
    再次config。这下显示配置正常了:

    QPA backends:
      DirectFB ............................... no
      EGLFS .................................. yes
      EGLFS details:
        EGLFS OpenWFD ........................ no
        EGLFS i.Mx6 .......................... no
        EGLFS i.Mx6 Wayland .................. no
        EGLFS RCAR ........................... no
        EGLFS EGLDevice ...................... no
        EGLFS GBM ............................ no
        EGLFS VSP2 ........................... no
        EGLFS Mali ........................... yes
        EGLFS Raspberry Pi ................... no
        EGLFS X11 ............................ no
      LinuxFB ................................ yes
      VNC .................................... yes
      Mir client ............................. no
    

    9.3.3.重新编译
    会多生成plugins\egldeviceintegrations\libqeglfs-mali-integration.so这个文件。
    9.3.4.问题解决
    将该文件推送到目标板,就正常了。

    10.Qt fatal error: GLES3/gl3.h: No such file or directory
    Qt交叉编译应用后报错:

    …/…/…/include/QtGui/…/…/src/gui/opengl/qopengl.h:109:26: fatal error: GLES3/gl3.h: No such file or directory
    
     
     
    • 1

    编译单个应用,我们可以直接填写对应路径来解决,但是这个其实是交叉编译系统配置问题,每一个应用都改会比较麻烦。最佳方式是交叉编译时,就通过统一的配置解决。

    10.1.处理方法1:

    A:platform\framework\qt\qt-everywhere-src-5.12.5\qtbase\mkspecs\linux-aarch64-gnu-g++\qmake.conf
    添加OPENGL_ES2参数:

    export QT_GPU_LIB=/platform/core/graphics/gpu_um_pub/mali-bifrost/fbdev/mali-g31/aarch64-linux-gnu/lib
    export QT_GPU_INC=/platform/core/graphics/gpu_um_pub/mali-bifrost/include
    

    # modifications to linux.conf
    QMAKE_AR = aarch64-linux-gnu-ar cqs
    QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
    QMAKE_NM = aarch64-linux-gnu-nm -P
    QMAKE_STRIP = aarch64-linux-gnu-strip
    QMAKE_INCDIR_OPENGL_ES2 += < / s p a n > Q T G P U I N C Q M A K E L I B D I R O P E N G L E S 2 < s p a n c l a s s = " t o k e n o p e r a t o r " > + = < / s p a n > < s p a n c l a s s = " t o k e n v a r i a b l e " > </span>QT_GPU_INC QMAKE_LIBDIR_OPENGL_ES2 <span class="token operator">+=</span> <span class="token variable"> </span>QTGPUINCQMAKELIBDIROPENGLES2<spanclass="tokenoperator">+=</span><spanclass="tokenvariable">QT_GPU_LIB
    QMAKE_LIBS_OPENGL_ES2 += -lGLESv2
    10.2.处理方法2:

    不设置QMAKE_INCDIR_OPENGL_ES2 ,直接放入sysroot目录。
    .configure配置时,导出sysroot:

    export SYSROOT=out/buildroot/host/usr/aarch64-buildroot-linux-gnu/sysroot

    ./configure </span>
    -opensource </span>
    -confirm-license </span>
    -extprefix KaTeX parse error: Undefined control sequence: \< at position 55: …n punctuation">\̲<̲/span> -sysro…SYSROOT </span>
    -xplatform linux-aarch64-gnu-g++ </span>
    -device-option CROSS_COMPILE=$CROSS_COMPILE </span>
    .

    编译时,直接拷贝头文件到sysroot的usr/include目录:

    cp   ${MALI_INC_DIR}/*   out/buildroot/host/usr/aarch64-buildroot-linux-gnu/sysroot/usr/include -rf
    
         {&quot;mod&quot;:&quot;1585297308_001&quot;,&quot;spm&quot;:&quot;1001.2101.3001.6548&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/yuangc/article/details/118021354&quot;,&quot;extend1&quot;:&quot;pc&quot;,&quot;ab&quot;:&quot;new&quot;}"><div></div></div>
                <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-3fd7f7a902.css" rel="stylesheet">
                <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
        </div>
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值