抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录ARM平台linux->ubuntu系统下Qt交叉编译环境搭建过程,避免忘记。我们知道QTcreator。这仅仅是个IDE,他包含了一个编译器--qmake。这两者的关系与codeblocksg++的关系一样。

未完待续…

1、QT 5.15编译

编译目标程序地址:vedderb/vesc_tool: The source code for VESC Tool. See vesc-project.com (github.com)

本次程序安装版本建议使用QT5.15,Qt 官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,具体地址是:http://download.qt.io/

从QT5.15.0版本开始,官方不再提供离线版安装包,除非充钱买商业版。下载地址:https://download.qt.io/archive/qt/5.15/

因为后面要在开发板上跑qt程序,所以必须下载QT源码包,然后用交叉编译工具进行编译,才能得到在目标平台上可以运行的qt SDK。选择其中single版本,它是全部整合在一起了的https://download.qt.io/archive/qt/5.15/5.15.8/single/

2、QT源码编译

更新软件源和升级更新软件,输入如下指令:

1
2
sudo apt-get update
sudo apt-get upgrade

我们的设备是64位的处理器,下载安装编译器:aarch64-linux-gnu-gcc,查看哪些版本可以安装的命令:sudo apt-cache search aarch64

接下来的编译器版本号安装,要看清自己系统下有哪个版本编译器就使用然后通过apt-get install安装对应的版本即可。

安装完成后可以通过如下命令查看版本信息:

1
2
aarch64-linux-gnu-gcc -v
aarch64-linux-gnu-g++ -v

安装完编译器后解压qt-everywhere-opensource-src-5.15.8.tar.xz解压命令tar -xvf qt-everywhere-opensource-src-5.15.9.tar.xz

在编译之前先定义好Qt5.15的SDK路径,编译前确定好SDK路径,创建目录/opt/qt-5.15-arm64用于存放。

1
2
3
sudo mkdir qt-5.15-arm64
#进入路径qt-everywhere-src-5.15中,执行configure命令,具体参数如下,
./configure -release -nomake examples -no-iconv -opengl es2 -no-assimp -no-qt3d-profile-jobs -no-qt3d-profile-gl -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt-5.15-arm -opensource -confirm-license

其中-prefix选项后面的路径就是定义的Qt SDK路径,以上configure相关参数可以差异qt config参数注释。

3、ARM linux程序编译完成打包

3.1、准备

打包命令:

1
2
3
sudo chmod a+x pack_lib.sh # 增加执行权限
./pack_lib.sh test ./lib/ # 第一个参数: 应用程序 第二个参数: lib/路径
./pack_lib.sh vesc_tool_3.01 ./lib/

打包脚本,pack_lib.sh:

1
2
3
4
#! /bin/sh
# pack_lib.sh
deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )
cp -L -n $deplist $2

3.2、开始打包

  1. 程序编译完成后,新建一个文件夹用于存放文件,例如新建文件夹vesc_tool_3_01_arm
1
2
mkdir vesc_tool_3_01_arm
cd build-vesc_tool-Desktop-Release/
  1. 复制可执行文件到该文件夹:
1
cp vesc_tool_3.01 ../vesc_tool_3_01_arm/
  1. 创建lib文件夹,用于存放先关库:
1
mkdir lib
  1. 将pack_lib.sh拷贝到vesc_tool_3_01_arm文件夹中
1
cp pack_lib.sh ../../test_hmi/HMI_1.01/
  1. 查看文本内容,并添加权限:
1
2
3
4
vi pack_lib.sh 
cd ..
sudo chmod -R 777 vesc_tool_3_01_arm/
./pack_lib.sh vesc_tool_3.01 ./lib/
  1. 生成包,然后拷贝到新的arm设备上运行。
1
sudo tar -cvf vesc_tool_3_01_arm.tar vesc_tool_3_01_arm/
  1. pack_lib.sh使用方式:
1
2
sudo chmod a+x pack_lib.sh # 增加执行权限
./pack_lib.sh test ./lib/ # 第一个参数: 应用程序 第二个参数: lib/路径

3.3、vesc tool 3.01 arm版本编译后,程序使用

3.3.1、错误提示

1
2
marvsmart@rk356x:~/erik20230831/vesc_tool_3_01_arm$ ./vesc_tool_3.01                      
./vesc_tool_3.01: error while loading shared libraries: libxcb-xinput.so.0: cannot open shared object file: No such file or directory

提示缺少:libxcb-xinput,我们使用命令安装:sudo apt install libxcb-xinput-dev

由于我们的vesc tool界面全部是英文,而HMI有中文,所以运行HMI时候需要将字体文件拷贝到OPT文件目录下。错误信息如下:

1
QFontDatabase: Cannot find font directory /opt/Qt/5.15-static/lib/fonts.

3.3.2、程序运行脚本

编写一个运行程序的脚本AppRun.sh,每次运行时候执行脚本即可。

1
2
3
4
5
#! /bin/bash
# AppRun.sh
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${SHELL_FOLDER}/lib
${SHELL_FOLDER}/vesc_tool_6.02 "$@"

4、window系统下打包

由于QT程序中有使用QML,所以打包时候需要表明QML的地址。记住,使用qt自动的命令行工具,否则容易出现未知的错误。测试成功的命令:

1
2
3
windeployqt.exe G:\7.vesc_tool\exe>Energy_Storage_1.01.exe --qmldir D:\apps\QT\5.15.2\mingw81_64\qml

D:\apps\QT\5.15.2\mingw81_64\bin>windeployqt.exe --qmldir G:\7.vesc_tool\build\06_HMI_mobile\vesc_tool-release_6_02\mobile G:\7.vesc_tool\exe_for_mobile_2\vesc_tool_6.02_for_mobile.exe

注意,qmlPath 指的是你的项目中 qml 文件所在的文件路径,切勿被网络上错综复杂的文章误导指向Qt安装目录下的 qml 文件夹!

1
D:\apps\QT\5.15.2\mingw81_64\bin>windeployqt.exe --qmldir G:\7.vesc_tool\build\06_HMI_mobile\vesc_tool-release_6_02\mobile G:\7.vesc_tool\exe_for_mobile_1\vesc_tool_6.02_for_mobile.exe

项目QML路径:G:\7.vesc_tool\build\06_HMI_mobile\vesc_tool-release_6_02\mobile

评论