没有合适的资源?快使用搜索试试~ 我知道了~
首页Qt移植:Ubuntu18.04 交叉编译qt5.12.7详细教程配置编译qt-everywhere-src-5.12.7
配置编译qt-everywhere-src-5.12.7安装交叉编译链已配置好TSLIB编译注意事项配置编译qt源码执行脚本对于硬浮点设置相关参数配置QTCreator打开选项添加qmake添加已安装的arm版本交叉编译工具链最后组合下PS:对于强迫症需要安装rsync复制相关文件至开发板PC端的串口通讯工具成功移植到了ARM开发板上运行 安装交叉编译链 参考我的博客安装arm-linux-4.9.4交叉编译链 已配置好TSLIB 参考我的博客tslib编译教程 编译注意事项 注意使用的交叉编译工具链,带hf和不带hf的运行程序是由区别的,可能就无法运行程序(常见报错:no such file
资源详情
资源评论
资源推荐
Qt移植:移植:Ubuntu18.04 交叉编译交叉编译qt5.12.7详细教程配置编译详细教程配置编译qt-everywhere-src-5.12.7
配置编译配置编译qt-everywhere-src-5.12.7安装交叉编译链已配置好TSLIB编译注意事项配置编译qt源码执行脚本对于硬浮点设置相关参数配置QTCreator打开选项添加qmake添加已安装的
arm版本交叉编译工具链最后组合下PS:对于强迫症需要安装rsync复制相关文件至开发板PC端的串口通讯工具成功移植到了ARM开发板上运行
安装交叉编译链安装交叉编译链
参考我的博客安装arm-linux-4.9.4交叉编译链
已配置好已配置好TSLIB
参考我的博客tslib编译教程
编译注意事项编译注意事项
注意使用的交叉编译工具链,带hf和不带hf的运行程序是由区别的,可能就无法运行程序(常见报错:no such file or directory),最好与编译内核源码使用同一个工具链
arm-none-gnueabihf 和arm-linux-gnueabihf也是有区别的,带linux的是用于编译跑系统的app
在主机上善用readelf -h app_name 读取编译出的信息用来对比开发板app
编译选项GCC中-march、-mtune、-mcpu三个参数的设置
armv7-a与armv7区别
配置编译配置编译qt源码源码
本文默认采用的编译器为arm-linux-gnueabi-gcc 版本为4.9.4,软浮点
armv7是指令集,cortex-a8构架的都用armv7指令集度娘
这些编译选项最好对应硬件手册进行添加
配置选项参考
选项的约定:括号中的值,解释如下:
(以”-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
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
#添加交叉编译工具链路径 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
#定义压缩包名称
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
tar -xvf ${COMPRESS_PACKAGE}
fi
echo "[1;33m start open source file ...[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
}
#修改配置平台
do_config_before () {
if [ ! -d "${CONFIG_PATH}" ];then
cp -a ${SCRIPT_PATH}/${PACKAGE_NAME}/qtbase/mkspecs/linux-arm-gnueabi-g++ ${CONFIG_PATH}
fi
echo "#" > ${CONFIG_FILE}
echo "# qmake configuration for building with arm-linux-gnueabi-g++" >> ${CONFIG_FILE}
echo "#" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "MAKEFILE_GENERATOR = UNIX" >> ${CONFIG_FILE}
echo "CONFIG += incremental" >> ${CONFIG_FILE}
echo "QMAKE_INCREMENTAL_STYLE = sublib" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "#一下内容具体含义请查看官方文档,我的板子是beaglebone black,所以arch=armv7-a mtune=cortex-a8" >> ${CONFIG_FILE}
echo "QT_QPA_DEFAULT_PLATFORM = linuxfb:fb=/dev/fb0" >> ${CONFIG_FILE}
echo "QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8" >> ${CONFIG_FILE}
echo "QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8" >> ${CONFIG_FILE}
#使用带hf的gcc编译相关选项设置修改
#echo "QMAKE_CFLAGS += -mhard-float -march=armv7-a -mtune=cortex-a8" >> ${CONFIG_FILE}
#echo "QMAKE_CXXFLAGS += -mhard-float -march=armv7-a -mtune=cortex-a8" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "include(../common/linux.conf)" >> ${CONFIG_FILE}
echo "include(../common/gcc-base-unix.conf)" >> ${CONFIG_FILE}
echo "include(../common/g++-unix.conf)" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "#交叉编译工具链,自行修改成自己的,在命令行中输入#arm- 加tab键,打印出来的就是自己的工具链名字。后缀的-lts意思是加上ts库,也就是tslib库" >> ${CONFIG_FILE}
echo "# modifications to g++.conf" >> ${CONFIG_FILE}
echo "QMAKE_CC = ${CROSS_CHAIN_PREFIX}-gcc -lts" >> ${CONFIG_FILE}
echo "QMAKE_CXX = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "QMAKE_LINK = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "QMAKE_LINK_SHLIB = ${CROSS_CHAIN_PREFIX}-g++ -lts" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "#同上" >> ${CONFIG_FILE}
echo "# modifications to linux.conf" >> ${CONFIG_FILE}
echo "QMAKE_AR = ${CROSS_CHAIN_PREFIX}-ar cqs" >> ${CONFIG_FILE}
echo "QMAKE_OBJCOPY = ${CROSS_CHAIN_PREFIX}-objcopy" >> ${CONFIG_FILE}
echo "QMAKE_NM = ${CROSS_CHAIN_PREFIX}-nm -P" >> ${CONFIG_FILE}
echo "QMAKE_STRIP = ${CROSS_CHAIN_PREFIX}-strip" >> ${CONFIG_FILE}
echo "load(qt_config)" >> ${CONFIG_FILE}
echo "" >> ${CONFIG_FILE}
echo "#这个位置就是编译tslib时的prefix位置,自己设置" >> ${CONFIG_FILE}
echo "QMAKE_INCDIR=${TSLIB_INC}" >> ${CONFIG_FILE}
echo "QMAKE_LIBDIR=${TSLIB_LIB}" >> ${CONFIG_FILE}
}
#配置选项
do_configure () {
./configure \
-prefix ${INSTALL_PATH} \
-xplatform ${PLATFORM} \
-release \
-opensource \
-confirm-license \
-make libs \
-optimized-qmake \
-pch \
-qt-libjpeg \
-qt-zlib \
#-gif \
#-ico \
#-qt-libpng \
#--gui=yes \
#-widgets \
#-icu \
#-eventfd \
#-inotify \
#-gtk \
#-qt-sql-sqlite \
#-qt-freetype \
#-qpa xcb \
#-imf \
#-libudev \
#-evdev \使能evdev:输入事件驱动
#-libinput \输入子设备库
#-mtdev \使能多点触控
#-xcb-xinput \
#-xkbcommon \
#-mirclient \
#-qt-xcb \
#-xcb-xlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
#-openssl-linked \
-no-openssl \
-no-cups \
#-dbus-linked \
-no-glib \
#-glib \
-no-iconv \
#-gnu-iconv \
-nomake examples \
-nomake tools \
-tslib \
-v \
-I${TSLIB_INC} \
-L${TSLIB_LIB}
}
#-skip qtvirtualkeyboard
#编译并且安装
do_make_install () {
make && make install
}
#删除下载的文件
do_delete_file () {
cd ${SCRIPT_PATH}
if [ -f "${COMPRESS_PACKAGE}" ];then
sudo rm -f ${COMPRESS_PACKAGE}
fi
}
do_download_qt_every_src
do_tar_package
do_config_before
do_configure
do_install_config_dependent
do_make_install
do_delete_file
exit $?
执行脚本执行脚本
#添加可执行权限
sudo chmod +x xxx.sh
#运行脚本
sudo ./xxx.sh
对于硬浮点设置相关参数对于硬浮点设置相关参数
可直接cat /proc/cpuinfo查看相关信息
参考文章1
参考文章2
选项添加参考选项添加参考
gcc的编译参数上,使用-mfloat-abi=name来指定浮点运算处理方式。-mfpu=name来指定浮点协处理的类型。可选类型如fpa,fpe2,fpe3,maverick,vfp,vfpv3,vfpv3-
fp16,vfpv3-d16,vfpv3-d16-fp16,vfpv3xd,vfpv3xd-fp16,neon,neon-fp16,vfpv4,vfpv4-d16,fpv4-sp-d16,neon-vfpv4等。
使用-mfloat-abi=hard (等价于-mhard-float) -mfpu=vfp来选择编译成硬浮点。
使用-mfloat-abi=softfp就能兼容带VFP的硬件以及soft-float的软件实现。
运行时的连接器ld.so会在执行浮点运算时对于运算单元的选择,是直接的硬件调用还是库函数调用,是执行/lib还是/lib/vfp下的libm。-mfloat-abi=soft (等价于-msoft-float)直接调用
软浮点实现库。
配置配置QTCreator
打开选项打开选项
添加添加qmake
剩余10页未读,继续阅读
weixin_38519763
- 粉丝: 5
- 资源: 922
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- ExcelVBA中的Range和Cells用法说明.pdf
- 基于单片机的电梯控制模型设计.doc
- 主成分分析和因子分析.pptx
- 共享笔记服务系统论文.doc
- 基于数据治理体系的数据中台实践分享.pptx
- 变压器的铭牌和额定值.pptx
- 计算机网络课程设计报告--用winsock设计Ping应用程序.doc
- 高电压技术课件:第03章 液体和固体介质的电气特性.pdf
- Oracle商务智能精华介绍.pptx
- 基于单片机的输液滴速控制系统设计文档.doc
- dw考试题 5套.pdf
- 学生档案管理系统详细设计说明书.doc
- 操作系统PPT课件.pptx
- 智慧路边停车管理系统方案.pptx
- 【企业内控系列】企业内部控制之人力资源管理控制(17页).doc
- 温度传感器分类与特点.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0