配置编译qt-everywhere-src-5.12.7
安装qtcreator
sudo apt install qt5-default qtcreator -y
安装交叉编译链
参考我的博客安装arm-linux-4.9.4交叉编译链
已配置好TSLIB
参考我的博客tslib编译教程
编译注意事项
- 注意使用的交叉编译工具链,带
hf
和不带hf
的运行程序是由区别的,可能就无法运行程序(常见报错:no such file or directory),最好与编译内核源码使用同一个工具链cat /proc/version
- arm-none-gnueabihf 和arm-linux-gnueabihf也是有区别的,带linux的是用于编译跑系统的app
- 在主机上善用
readelf -h
app_name 读取编译出的信息用来对比开发板app,使用readelf -d libxx.so.xx |grep NEED
读取依赖的库文件列表 - 使用
file xx.so.xx.xx
读取库文件信息 - 使用
strings libxxx | grep GLIBC_
读取libstd.xx的依赖版本 - 使用
set
命令读取环境变量信息,相对env
命令更全面或者export -p
- 编译选项GCC中-march、-mtune、-mcpu三个参数的设置
- armv7-a与armv7区别
配置编译qt源码
- 本文默认采用的编译器为arm-linux-gnueabi-gcc 版本为4.9.4,软浮点
- armv7是指令集,cortex-a8构架的都用armv7指令集度娘
- 这些编译选项最好对应硬件手册进行添加
- 配置选项参考
- 选项的约定:括号中的值,解释如下:
- [ ]:内的内容意思是:可写可不写
- { }:那就必须要在
{ }
内给出的选择里选一个 - < >:表示必选
- | (竖线) 分隔括号或大括号内的语法项目,只能选择一个项目
- 以上是Linux中的常见约定
- 下面是QT的约定:
(以"-libpng… Select used libpng [system/qt/no]“为例)
1)“yes"不用明确指出(-libpng),括号中其他的值可以作为前缀,如”-qt-libpng”;
2)也可以用–libpng=qt的格式来表示
3)“auto"是"yes"和"no"的简写,代表[yes/no]
4)只出现"yes"或"no”,说明该选项不能自动检查,裁剪时要特别留意
复制以下脚本内容,保存为xxx.sh
xxx
代表脚本名称,自己定义
#!/bin/sh
#只要shell脚本中发生错误,即命令返回值不等于0,则停止执行并退出shell
set -e
#不存在的变量则报错并停止执行shell
set -u
PLATFORM=linux-arm-qt
SCRIPT_PATH=`pwd`
#修改需要下载的源码前缀和后缀
OPENSRC_VER_PREFIX=5.12
OPENSRC_VER_SUFFIX=.7
#添加tslib交叉编译的动态库文件和头文件路径
TSLIB_LIB=/home/${USERNAME}/nfs/arm_tslib/lib/
TSLIB_INC=/home/${USERNAME}/nfs/arm_tslib/include/
#修改源码包解压后的名称
PACKAGE_NAME=qt-everywhere-src-5.12.7
#定义编译后安装--生成的文件,文件夹位置路径
INSTALL_PATH=/opt/QT_5.12.7_INSTALL
#编译工具链是否带hf,带则填入true
USE_HF_COMPILER=false
#添加交叉编译工具链路径 example:/home/aron566/opt/arm-2014.05/bin/arm-none-linux-gnueabi
CROSS_CHAIN_PREFIX=/usr/local/arm_4.9.4/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi
#是否启用tslib
ENABLE_TSLIB=true
#定义压缩包名称
COMPRESS_PACKAGE=${PACKAGE_NAME}.tar.xz
#无需修改--自动组合下载地址
OPENSRC_VER=${OPENSRC_VER_PREFIX}${OPENSRC_VER_SUFFIX}
DOWNLOAD_LINK=http://download.qt.io/archive/qt/${OPENSRC_VER_PREFIX}/${OPENSRC_VER}/single/${COMPRESS_PACKAGE}
#无需修改--自动组合平台路径
CONFIG_PATH=${SCRIPT_PATH}/${PACKAGE_NAME}/qtbase/mkspecs/${PLATFORM}
#无需修改--自动组合配置平台路径文件
CONFIG_FILE=${CONFIG_PATH}/qmake.conf
#下载源码包
do_download_qt_every_src () {
if [ ! -f "${COMPRESS_PACKAGE}" ];then
if [ ! -d "${PACKAGE_NAME}" ];then
wget -c ${DOWNLOAD_LINK}
fi
fi
}
#解压源码包
do_tar_package () {
#if exist file then
if [ ! -d "${PACKAGE_NAME}" ];then
if [ -f "${COMPRESS_PACKAGE}" ];then
tar -xvf ${COMPRESS_PACKAGE}
else
echo "\033[1;33m no such file or directory ...\033[0m"
exit 65
fi
fi
echo "\033[1;33m start open source file ...\033[0m"
cd ${PACKAGE_NAME}
}
#安装依赖项
do_install_config_dependent () {
sudo apt install qt3d5-dev-tools -y
sudo apt install qml-module-qtquick-xmllistmodel -y
sudo apt install qml-module-qtquick-virtualkeyboard qml-module-qtquick-shapes qml-module-qtquick-privatewidgets qml-module-qtquick-dialogs qml-module- qt-labs-calendar qml -y
sudo apt install libqt53dquickscene2d5 libqt53dquickrender5 libqt53dquickinput5 libqt53dquickextras5 libqt53dquickanimation5 libqt53dquick5 -y
sudo apt install qtdeclarative5-dev qml-module-qtwebengine qml-module-qtwebchannel qml-module-qtmultimedia qml-module-qtaudioengine -y
}