目的规划步骤
交叉编译时要注意版本问题,主要是和目标机(最终会运行程序的机器)对位,多花时间去识别目标机的开发环境的版本,找到目标机的交叉编译链对应版本。 它旁边的大多数一般指示都是正确的。
目标机搭载Galaxy Kirin(V10,不是V10SP1),版本信息如下
Linux version 4.4.131-20210817.kylin.desktop-generic (YHKYLIN-OS@d0ee15aef8b2)
(gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6kord1~16.04.12) ) #kylin-KylinOS SMP Tue Aug 17 08:41:44 UTC 2021
交叉编译的环境是用虚拟机搭建的,使用的是ubuntu系统,版本信息如下。
Linux version 5.13.0-40-generic (buildd@ubuntu) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0,
GNU ld (GNU Binutils for Ubuntu) 2.34) #45~20.04.1-Ubuntu SMP Mon Apr 4 09:38:31 UTC 2022
现在我们来看看开发环境的版本。 虽然主要是匹配gcc的版本,但是目标机的gcc版本是gccversion5.4.020160609(Ubuntu/Linaro5.4.0-6kord1~16.04.12),而ubuntu20.04自带的gcc是肯定不能用的,因为它是x86架构版本。 需要找到与目标机gcc版本匹配的交叉编译链并安装在虚拟机上,版本需要匹配到什么程度? 两个gcc版本必须相同吗? gcc 仍有几个小的版本差异可以算作匹配。 这里还有一个参数需要检查,就是libc.so.6的版本(这个文件的历史和作用可以百度搜索到),它是gcc安装中的一个库文件的软链接目录。 找到该文件,执行ls -l 查看结果。 目标机的版本是libc-2.23.so,那么目标机的gcc只能支持2.23版本? 这里可以执行strings/lib/aarch64-linux-gnu/libc.so.6|grepGLIBC_,查看结果,支持的版本有2.17、2.18、2.22、2.23,也就是说我们的交叉编译链gcc正在寻找该库的版本与其中之一匹配,这提高了兼容性。
xxx@xxx:/lib/aarch64-linux-gnu$ strings libc.so.6 | grep ^GLIBC_
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_PRIVATE
接下来要做的就是寻找交叉编译链。 上面可以看到目标机的gcc版本是gccversion5.4.020160609,于是就从这个版本开始查找。这次是在下面的网站找到的
folder 4.9-2016.02 -
folder 4.9-2017.01 -
folder 5.1-2015.08 -
folder 5.2-2015.11 -
folder 5.2-2015.11-1 -
folder 5.2-2015.11-2 -
folder 5.3-2016.02 -
folder 5.3-2016.05 -
folder 5.4-2017.01 - //这两个版本看样子符合我们的要求起码是5.4版本的
folder 5.4-2017.05 -
然后点击单步进入几层目录,直接到达这个地址,选择解压后可以直接使用的成品(还要注意32位、64位、big-endian还是little-endian,还有根据自己的开发环境选择系统和机器)
Name Last modified Size License
gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz 27-Feb-2018 00:14 86.5M open //这个是解压后就能用的
直接下载下来,放到虚拟机里,解压,先检查上面说的版本,结果如下,目标机的版本刚好和虚拟机的版本兼容,这个应该可以用
xxx@xxx:/usr/local/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib$ strings libc.so.6 | grep ^GLIBC_
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE
参考博客如下,谢谢
%257B%2522request%255Fid%2522%253A%2522161754731016780357222094%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2 52 2%257D&request_id=161754731016780357222094&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2 ~rank_v29-1-115427620.nonecase&utm_term=%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91
交叉编译Qt源代码
编译源码之前一定要阅读源码目录下的README文件,基本可以匹配编译环境
现在我已经找到了合适的交叉编译链,连接上之后就可以使用交叉编译链来编译Qt源码,生成arm版本的库文件了。 可以参考下面掠夺者的博客。 我基本都是跟着他的步骤走的。
defaultBlogCommendFromBaidudefault-8.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2defaultBlogCommendFromBaidudefault-8.pc_relevant_default&utm_relevant_index=12
#qt源码下载地址
事实上,即使一步一步做到了,仍然会出现不可预知的问题,前进的道路仍然是曲折的。 一开始想编译5.15.2版本,结果是内存字节没有对齐。 然后我又尝试了4.8.7版本,又报错了。 最后尝试5.13.2版本,多次尝试编译成功。
编译Qt源码主要是写configure参数,可以参考我的
#!/bin/bash
./configure -prefix /usr/local/qt5.13.2ForArm
-opensource
-confirm-license
-skip qtlocation # 这个模块当时编译报错,我用不到为了赶时间直接跳过了
-nomake examples
-nomake tests
-xplatform aarch64-linux-gnu-g++
-debug
-no-opengl
也可以参考这篇文章查看Qt模块
我在makeinstall中也遇到过,没有发现python错误编译istio源码,可以参考这篇文章
执行make的时候会报找不到交叉编译器的错误,但是我确实添加了编译器的环境变量。 我被这个问题困扰了很长时间。 你可以参考这篇文章
按照上面的方法,可以交叉编译qt源码,而且编译成功。 事实上,模块肯定不完整。 很多模块没有相应的环境,基本使用还是够用的。
qtcreator编译arm版qt程序
直接使用交叉编译链命令行来编译程序对我来说有点复杂,还要写Makefile。 所以我决定用qtcreator来编译程序。 这里需要注意的是,安装qtcreator时编译istio源码,只需要检查qtcreator模块本身即可,qt提供的其他编译器不需要。 至于qtcreator的版本,我用的也是5.13.2版本。
操作步骤请参考下面的博客,可以找到qt自带的示例程序编译一下,看看能不能通过(我从windows上找到了源码,我没有下载qt的源码) ubuntu 上的示例程序)
以下是我配置的界面
###解答1:您好编译链源码,要下载Qt5.5.1源代码,您可以按照以下步骤操作: 1.打开Qt官方网站:qt.io/downloads,点击“下载”按钮。 2. 在下载页面,选择“源代码”选项卡,选择操作系统对应的Qt版本。 3、下载页面会有一个“开始下载”按钮,点击该按钮即可开始下载Qt5.5.1源码压缩包。 4、下载完成后编译链源码,将压缩包解压到想要存放Qt源码的目录。 5、打开解压后的文件夹,找到文件夹中的“configure”文件,双击运行。 6. 配置脚本将根据您的操作系统和编译器设置Qt编译环境。 7、配置完成后,使用命令行或者IDE打开Qt源代码文件夹。 8.在Qt源代码文件夹中,可以找到各个模块的源代码、示例和文档。 这样,你就成功下载了Qt5.5.1的源码,可以在自己的机器上阅读、学习或者二次开发了。 如果需要根据自己的需求进行编译构建,可以参考Qt官方编译手册进行操作。 祝您学习愉快! ###答案2:Qt5.5.1是一个跨平台的应用程序开发框架。 如果您想下载其源代码,可以按照以下步骤操作: 1. 打开Qt的官方网站(qt.io/),点击网站底部的“下载”按钮。
2、在下载页面,选择“Archives”选项卡,找到“Qt5.5.1”版本并点击。 3. 在弹出的页面中,选择您的操作系统和编译器版本。 如果您使用的是Windows操作系统,可以选择基于MSVC2013或MinGW编译器的版本。 如果您使用的是Mac系统,可以根据Clang版本选择Qt。 如果您使用的是Linux系统,可以根据GCC版本选择Qt。 4.根据您的选择,点击对应的下载链接,开始下载对应的离线安装包。 5、下载完成后,解压安装包,即可得到Qt5.5.1的源代码文件。 另外,Qt的源代码也可以通过版本控制工具Git获取。 您可以在Qt官方Git仓库(qt.io/cgit/qt/qt5.git/)中找到Qt5.5.1的源代码,然后根据Git的使用情况克隆或下载源代码。 需要注意的是,Qt的源代码下载量可能比较大,因此下载时间可能比较长,需要一定的网络带宽和存储空间来存储源代码。 ###解答3:您可以通过以下步骤下载qt5.5.1源代码: 1、打开Qt官网(qt.io/),点击底部菜单栏的“下载”按钮。 2、在下载页面,可以看到有不同版本的Qt可供下载。 向上滚动页面,直到找到下面的“历史 Qt 版本”部分。
3. 在“历史 Qt 版本”部分中,找到并单击“版本 5.5.1”的链接。 4. 进入 5.5.1 版本的下载页面后,您将听到不同的 Qt 安装程序。 查找标有“源代码”或“src”的选项,然后单击下载链接。 5、下载源码包后,解压即可得到Qt5.5.1的源码。 请注意,Qt5.5.1 是一个可能已过时且不再受到官方支持的版本。 如果您正在寻找最新版本的 Qt 源代码,我建议您查看 Qt 官方网站上提供的最新版本。