零:准备开发环境
1、 开发PC安装Ubuntu1804/1604
2、 安装交叉编译工具链
工具链一般随开发板提供,各官网也可下载。请按官方文档安装配置。
NVIDIA Xavier、华为MDC系列、 TI TDA4VM 配置方法大同小异。
一、下载Qt源代码
建议选择国内镜像,速度较快:
http://mirrors.ustc.edu.cn/qtproject/official_releases/qt/5.15/5.15.2/single/
在Linux下编译一定要选择后缀名为.tar.xz的压缩包。
二、解压缩
tar -xvf qt-everywhere-src-5.15.2.tar.xz
三、配置
1、在源代码的的根目录创建一个文件:autoconfig.sh,内容如下:
./configure \
-prefix /opt/qt-5.15.2 \
-release \
-opensource \
-skip qtwayland \
-skip qtlocation \
-skip qtscript \
-xplatform linux-aarch64-gnu-g++ \
-sysroot /请替换成工具链中的根文件系统目录/ \
-make libs \
-optimized-qmake \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-pch \
-shared \
-qt-libjpeg \
-qt-zlib \
-qt-libpng
请务必正确配置-sysroot,链接时将从这里查找依赖库。
2、修改qtbase/mkspecs/linux-aarch64-gnu-g++/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)
# modifications to g++.conf
QMAKE_CC = /请替换为交叉编译器目录/aarch64-none-linux-gnu-gcc
QMAKE_CXX = /请替换为交叉编译器目录/aarch64-none-linux-gnu-g++
QMAKE_LINK = /请替换为交叉编译器目录/aarch64-none-linux-gnu-g++
QMAKE_LINK_SHLIB = /请替换为交叉编译器目录/aarch64-none-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = /请替换为交叉编译器目录/aarch64-none-linux-gnu-ar cqs
QMAKE_OBJCOPY = /请替换为交叉编译器目录/aarch64-none-linux-gnu-objcopy
QMAKE_NM = /请替换为交叉编译器目录/aarch64-none-linux-gnu-nm -P
QMAKE_STRIP = /请替换为交叉编译器目录/aarch64-none-linux-gnu-strip
load(qt_config)
执行 autoconfig.sh
3、make -j8
4、make install
如果一切顺利,编译后的Qt库将被安装到:
/请替换成工具链中的根文件系统目录/opt/qt-5.15.2
5、安装到开发板
将qt-5.15.2文件打包成qt-5.15.2.tar.gz格式,传到开发板,解压
将解压后的qt-5.15.2/lib目录添加到开发板的LD_LIBRARY_PATH环境量中。
6、写一个demo,放在开发板中运行。
#include <QCoreApplication>
#include <iostream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::cout << "hello from Qt! \n";
return a.exec();
}
正常情况下,输出如下:
root@my-dev:~# ./demo
hello from Qt!
也有可能会出现一个小问题:
QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
解决办法请参见:解决交叉编译64位Qt5.15中遇到的问题