瑞芯微Rockchip开发者社区
直播中

王斌

7年用户 1293经验值
私信 关注
[问答]

Qt5.14.2移植到SOM-RK3399开发板总是失败怎么解决?

Qt5.14.2移植到SOM-RK3399开发板总是失败怎么解决?

回帖(1)

杨芳

2022-3-7 10:29:24
1. 概述




由于FRIENDLYELEC系统中使用的Qt的平台抽象层QT_QPA_PLATFORM是xcb,而我移植的Qt5.14.2在配置时没有配置xcb,所以在Host编译的可执行程序在目标机SOM-RK339上运行时使用的都是Qt5.14.2的库,窗口总是创建失败;因此重新去配置Qt5.14.2使能xcb,但是它依赖其他库,我尝试去编译其他依赖库,发现依赖太多其他库,尝试了一天多时间,以失败告终,所以就放弃了。

  
解决办法是:移植Qt5.9.5,这个版本和FRIENDLYELEC系统上自带的Qt版本移植。


2. 配置Qt5.9.5


2.1 mkspec配置文件


bruce@bruce:~/Code/qtsourcecode/qt-everywhere-opensource-src-5.9.5/qtbase/mkspecs/linux-arm-som-rk3399$ cat qmake.conf
#
# qmake configuration for building with aarch64-linux-gnu-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib


include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

QMAKE_INCDIR_POST += /usr/aarch64-linux-gnu/include
QMAKE_LIBDIR_POST += /usr/aarch64-linux-gnu/lib

QT_QPA_DEFAULT_PLATFORM = xcb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -mcpu=cortex-a72
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -mcpu=cortex-a72
QMAKE_CXXFLAGS += -std=c++17
QMAKE_LIBS += -lrt
# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

# 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
load(qt_config)

2.2 配置脚本


#!/bin/bash

../configure
        -xplatform linux-arm-som-rk3399
        -prefix /home/bruce/Code/qtsourcecode/qt-everywhere-opensource-src-5.9.5/shadow_build/qt5.9.5_install
        -release -opensource -confirm-license
        -make libs
        -pch
        -qt-libjpeg
        -qt-libpng
        -qt-zlib
        -no-opengl
        -no-sse2
        -no-openssl
        -no-cups
        -no-glib
        -no-dbus
        -qpa xcb
        -no-xcb
        -no-separate-debug-info
        -c++std c++11
        -nomake tests
        -nomake examples
        -strip
        -optimized-tools
        -make tools
        -recheck-all



注意: 加入-make tools配置选项用来生成qhelpgenerator工具,如果不加入的话会不生成,它用来生成Qt的帮助文档。如果不加在执行make docs时会失败。


2.3 执行make docs时出现的错误




找不到/lib/ld-linux-aarch64.so.1的错误


2.3.1 查找"ld-linux-aarch64.so.1"


ruce@bruce:~$ sudo find /  -name "ld-linux-aarch64.so.1"
[sudo] password for bruce:
find: ‘/run/user/1000/gvfs’: Permission denied
/usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1
/opt/FriendlyARM/toolchain/6.4-aarch64/aarch64-cortexa53-linux-gnu/sysroot/lib/ld-linux-aarch64.so.1
/opt/FriendlyARM/toolchain/gcc-linaro-7.5.0-2019.12-i686_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/ld-linux-aarch64.so.1
/opt/FriendlyARM/toolchain/gcc-linaro-aarch64-linux-gnu-4.8-2013.10_linux/aarch64-linux-gnu/libc/lib/ld-linux-aarch64.so.1
/home/bruce/Softwares/gcc-linaro-aarch64-linux-gnu-4.8-2013.10_linux/aarch64-linux-gnu/libc/lib/ld-linux-aarch64.so.1



  • 将/usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1拷贝到/lib


bruce@bruce:~$ sudo cp /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib



  • 重新执行make docs执行成功


2.4 执行make install_docs安装Qt手册


bruce@bruce:~/Code/qtsourcecode/qt-everywhere-opensource-src-5.9.5/shadow_build$ make install_docs

3. 打开QtCreator配置环境(仍然用安装Qt5.14.2时的QCreator)


3.1 配置使用的Qt版本(Qt5.9.5)




3.2 配置build kits




3.3 配置Qt5.9.5的API手册




  • 选择Tools—Options打开选项手册

  • 点击Add按钮添加Qt的API手册:(*.qch文件)

  • 添加后(*.qch文件)



3.4 测试API手册




搜索QWidget,成功搜索到



4. 将编译的Qt5.9.5拷贝到SOM-RK3399配置环境



pi@SOM-RK3399v2:/$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='h:w$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
#QTDIR=/usr/local/Trolltech/Qt-5.10.0-rk64one
#QT_QPA_PLATFORM=xcb
#QT_QPA_EGLFS_HIDECURSOR=0
#QTWEBENGINE_DISABLE_SANDBOX=1
#QT_QPA_FONTDIR=/usr/share/fonts/truetype/ubuntu-font-family
#QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/Trolltech/Qt-5.10.0-rk64one/plugins/

export QTDIR=/opt/qt5.9.5_install
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
#export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/Trolltech/Qt-5.10.0-rk64one/plugins/
export QT_QPA_PLATFORM=xcb
export QT_QPA_FONTDIR=/usr/share/fonts/truetype/ubuntu-font-family
举报

更多回帖

发帖
×
20
完善资料,
赚取积分