| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> QT4.8.6的交叉编译 - 编译平台:Ubuntu 20.04 LTS,目标平台:linux/imx6ull -> 正文阅读 |
|
[系统运维]QT4.8.6的交叉编译 - 编译平台:Ubuntu 20.04 LTS,目标平台:linux/imx6ull |
开发环境
Qt-everywhere-opensource源码: Index of /archive 特别说明1笔者已经在Ubuntu 16.04, 18.04, 20.04三个版本中成功实现Qt的交叉编译,但这并不说明本项目是与Linux版本无关的。目前确定的是本机的gcc/g++编译器版本会影响编辑的结果。例如Ubuntu 20.04LTS系统自带的gcc编译器版本为9.3.0,使用这个版本的编译器是无法完成Qt的交叉编译的。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E94k6E09-1626352525518)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/606aa1e6-7812-4244-93f3-631b56261c63/Untitled.png)] 为了解决这个问题,应当安装gcc-7编译器:
可以设置系统默认的gcc/g++编译器版本号,也可以在qt源码的mkspecs中更改默认的编译器: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfN25kxz-1626352525520)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e30e9130-7fb1-4eef-af45-b2e6c0936e5c/Untitled.png)] 特别说明2在Qt mkspecs中选择合适的平台并修改交叉编译的选项。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9o8KrPTq-1626352525521)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/54272f33-cd50-44f4-a019-54bce74746ff/Untitled.png)] 如果在后面程序的编译过程中(加载插件、调用动态库)出现了如下类似报错: The plugin ‘/usr/lib/libEWhalesInputMethodPro.so’ uses incompatible Qt library. Expected build key “arm linux gnueabihf-g++ no-pkg-config”, got “arm linux g++ no-pkg-config”: 则需要检查源码中对
如果已经编译完成,则可以直接修改**<QtCore/qconfig.h>**头文件,修改的内容与上述文件相同。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJs8llPo-1626352525521)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6d93cf2a-676a-406f-b6f0-29b800e918fa/Untitled.png)] 特别说明3从笔者的交叉笔译实战来看,能解决编译过程中遇到问题的关键在于了解Qt从源代码编译成可以部署到嵌入式系统中的过程。这个过程分为两个核心的部分,分别使用了本地编译器与交叉编译工具链,任何一个环节出错都可能导致最终的编译失败,而且这种出错不一定是显性报错的。举例说明: 进行第一阶段编译时,生成的Qt-tools可执行程序位于bin文件夹。其中,uic程序是用来将页面设计文件(.ui)转化为对应的头文件(.h)。如果本地编译器GCC的版本为V9.3,程序会工作异常,导致页面设计相关的头文件出错,进而使得后续的Qt-opensource源码编译过程出错。如果将编译器版本换成GCC-V7,则uic程序运行正常,Qt源码可以正常编译。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X6EGLVmi-1626352525522)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dae013a7-4095-4bb8-9635-54a9feecb27d/Qt_cross_compile.png)] 快速开始设置工具链若采用最新的CrossCompileDev工具包进行开发环境配置,则:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CWu4hAwU-1626352525522)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a36a088-cd74-46e6-82b2-f821a3055875/Untitled.png)]
同时在CrossCompileDev/tools/tslib-1.4中有已经交叉编译好的tslib库,因此步骤1~2可以直接跳过。若直接采用alwhales工业平板电脑进行开发,则关于tslib库和Qt库移植到开发板的步骤(步骤6)可以省略。 最为关键和必不可少的步骤为:3. qt4.8.6的交叉编译, 进入CrossCompileDev/tools/CrossCompileQt /qt-4.8.6-source文件夹中,修改build_arm_qt.sh脚本中开头的两处路径配置,然后直接运行该脚本就可以快速完成Qt的交叉编译与安装。需要特别说明的是,每次的Qt交叉编译工作开始前,请确保Qt源码处于未经配置的原始状态,最简单的做法是删除原来的源码qt-everywhere-opensource-src-4.8.6,然后从原始代码压缩文件中再解压一份。或者进入qt-everywhere-opensource-src-4.8.6文件夹,然后运行 一般流程1. 交叉工具链的安装将资料包中的4.9.1.tar.bz2解压到/opt/arm-gcc下(目录随自己喜好,本文以此为例),会在/opt/arm-gcc目录下出现目录4.9.1,解压命令如下:
添加环境变量,在/etc/profile文件的末尾添加
然后命令行使设置立即生效
可以在命令行敲arm加上tab键,查看环境设置是否生效,如果生效,如下图所示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lsv08EtM-1626352525523)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0370b21f-d456-4d0f-8c40-4efff01fb36c/image3.png)] 查看当前的arm-gcc的版本:
如果找不到可以:
如果出现缺少共享库文件,安装即可。 2. ts库的交叉编译创建工作目录,
复制tslib-1.4.tar.gz到此目录: 进入此目录,并解压tslib-1.4.tar.gz,
进入解压出来的tslib目录,,
安装编译所需的一些库,
设置ts库的存放路径,
生成configure脚本,
清除上次编译信息、屏蔽一些没用的编译错误信息:
编译配置:
开始编译:
创建一个放置待会编译出来的可移植库的目录lib-arm,这个库会在编译qt的时候用,
安装到/home/li/QT/tslib-1.4/ lib-arm,
编译成功后在/home/li/QT/tslib-1.4/lib-arm下产生bin、etc、include、lib 4个文件夹,修改这里的etc/ts.conf,打开之前屏蔽掉的module variance delta=30 然后查看编译器的版本: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IbgDOV7-1626352525523)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4817dd4c-2c2e-425d-9882-78f919b28371/image4.png)] 此时ts库的编译就完成了,接下来就可以编译qt了,下面说明下如何移植ts库到开发板上。 1 将/home/li/QT/tslib-1.4/lib-arm下的几个文件夹拷贝到arm文件系统的/opt/tslib-1.4 2 设置环境变量脚本tslib.sh,脚本位置在/etc/profile.d/目录下,如下图所示:
3 启动arm板,命令行下执行脚本
5 校准触摸屏
会出现校准画面,完成后生成pointercal 文件 6 链接
7 修改配置文件 tslib的配置文件是/opt/tslib-1.4/etc/ts.conf,针对不同的触摸屏可能需要设置不同的配置参数。目前AlWhales联鲸微工业电脑(电容屏)使用的配置如下所示:
3. qt4.8.6的交叉编译
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GESsIk4f-1626352525524)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/50b81cd6-bdef-4ea7-bf6b-aa009a281bd0/Untitled.png)]
编译时间会很长,等他编译完之后会执行 如果报权限错误,就单独在命令行执行 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b7BpjMjz-1626352525524)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bf101e7-3f7a-4a01-b5ce-778f79f88e97/image7.png)] 移植qt库到开发板上: 1 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下, 2 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MmypVzT0-1626352525526)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1d0343f0-872d-4325-b1e8-540c7e88f0c6/image8.png)] 需要说明的是在开发板中运行qt应用程序的时候要加后缀 4. 配置qtcreator的交叉编译工具链
打开安装好的qtcreator(可以在ubuntu软件中心下载),点击工具栏的“工具”->“选项”, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iix6Amp4-1626352525526)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a97efcf9-abaf-463c-9e28-a0490cdbfd79/image9.png)] 点击“Qt Versions”按钮,点击此界面的“添加”按钮,在跳出来的对话框中选择编译qt4.8.6时产生的qmake文件,本文的qmake路径为/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake,视自身设置而定,配置如下图所示,设置完后点击“Apply”按钮, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29eJc65v-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/78b51946-c5ae-41a8-b366-cb1ed272791b/image10.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d4xIDhLU-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7b898936-dc61-4d25-821f-7b3967617366/image11.png)] 点击“编译器”按钮,单击“添加”按钮,选择交叉编译器的g++路径,本文的路径为/opt/arm-gcc/4.9.1/bin/arm-linux-g++,配置如下图所示,配置完成后点击“Apply“按钮, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cxkkv195-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1a23427b-d200-4ed5-8218-359c3429e856/image12.png)] 点击“构建套件”,单击“添加”按钮,之后在“编译器”栏和“Qt版本”栏选择刚才添加的就好了,配置如下图所示,配置完成后点击“Apply”,然后点击“OK”按钮即可。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9PP85Mv-1626352525527)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c8abac6d-cbdc-4dc5-99ab-b9f9658d14bd/image13.png)] 点击菜单栏上的 Tools Options 进入 Options 窗口,点击左侧 Build & Run ,在右侧出现的窗口中点击 Qt Versions ,设置 Qt 的版本。点击右边的 Add… ,在弹出的窗口中进入到 /opt/qt-4.8.5-sdk/bin ()中,选中qmake , 然后点击 Open ,如图 6-11 所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSAlFDDl-1626352525528)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d9529049-a149-4bad-a09e-babd53e6d6b6/image14.png)] 图 6-11 然后点击 Apply 。 在 Build & Run 中点击 Compilers ,配置我们所使用的交叉编译器,然后添加交叉编译工具,点击右侧的 Add 在出现的选项中选择 GCC ,点击下面 Compiler path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gcc ,然后点击 Open 。输入 Name ,例如 arm-linux-gnueabihf-GCC ,然后点击 Apply。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U7MggqEV-1626352525528)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2d1acb93-5e4c-4d36-88d8-4bc190488274/image15.png)] 图 6-13 在 Build & Run 中点击 Debuggers ,配置我们所使用的调试器,点击右侧的 Add ,点击下面 Path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gdb ,然后点击 Open 。输入 Name ,例如: arm-linux-gnueabihf-gdb Debugger ,然后点击 Apply 。如图 6-21 所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fr0kljpP-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2fac508a-59a3-4d78-b057-f8714eecebf1/image16.png)] 点击左侧 Devices,设置设备参数。点击右侧的 Add ,选中 Generic Linux Device , 然后点击 Start Wizard ,输入名字,输入设备的 IP 地址,根据设备的实际地址设置, 输入设备的登录名:root ,然后点击 Next 。点击 Finish 完成设备的创建, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUUcj7N8-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1e55ce5e-0166-4d9a-82c2-25163ab1c725/image17.png)] 5. 使用QT creator开发项目创建新的项目,Kits选择上面的imx6设备。(注:只能选择一个设备,多选会出错)。 项目编译完成后,点击右侧的Project,点击左侧的 Projects ,选择 Build & Run ,在 imx6 中选择 Build ,在 Build Settings General 中,不要勾选 Shadow build: ,选择 Run ,点击 Method: 右边的 Add ,然后选择 Deploy to Remote Linux Host , 添加完成之后你还可以在下方看到红色字体的 Remote path not set 错误,这个错误的解决方法是:点击左边的 Edit 并打开 *.pro ,添加以下两行信息: target.path += /home/root INSTALLS += target 然后选择 File Save 保存文件,添加之后点击左侧的 Project ,你可以看到红色字体已经消失,被 /home/root/hellomyir 取代。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tsKGOF9e-1626352525529)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4d45191b-970b-4f48-953c-bdab063aa388/image18.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yao1H8x0-1626352525530)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5bff3da4-cb1b-4702-8b4e-cacb260cfa9e/image19.png)] 注:在Arguments 选项后加上:-qws,否则会出错 6. 移植qt库到开发板上1 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下, 2 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示,
说明:在交叉编译执行之后会在开发板上生成可执行文件,执行时后面加-qws
7. 其他安装Qt帮助文档 将qt-everywhere-opensource-src-4.8.6源码中./doc/qch文件夹复制到qt安装目录QtEmbedded-4.8.6-arm下。打开Qt Creator,依次点击Tools,Options,Help,Documentation,点击add,添加QtEmbedded-4.8.6-arm/qch中的文件。 Qt Creator的配置文件 如果出现Qt Creator程序的配置更改不能生效的问题,可能是因为它的配置文件出现了权限问题。Qt Creator的配置文件在/home/tao/.config/QtProject目录下。若删除这个目录下的文件,则Qt Creator会被重置,编译器配置、主题风格、快捷键设置等会全部恢复默认值。若更改这个目录下文件的权限,一般可以解决Qt Creator程序的配置不能生效的问题。同时,如果备份这个文件夹下面的文件,并在再次重装Qt Creator程序时恢复它,可以使程序直接恢复到备份文件所记录的配置状态。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9mL1tXU-1626352525530)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/617336ff-2ebb-4d11-8f30-a1a22c260f36/image20.png)] |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 16:47:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |