Qt5开发环境-银河麒麟V10ARM平台

目录

前言

近期因参与开发的某个软件需要适配银河麒麟v10arm 平台,于是自己搭建起一套Qt 开发环境,在此记录下具体过程,以供有需要的朋友参考。一开始手上并没有Arm架构的PC,先在Windows下用Vs2017和QtCreator 开发,软件开发快结束的时候Arm PC到了。Qt 没有提供可直接安装的arm架构安装包,只能自己通过编译Qt 来搭建开发环境。

1.源码下载

下载Qt5.12.7,从这里下载Qt5.12.7 。一定要选择后缀为.tar.xz的源码包,zip源码包亲测编译时会遇到奇怪的问题。

2.编译安装

2.1 安装依赖

  • 安装OpenGL依赖
    sudo apt-get install build-essential
    sudo apt-get install libgl1-mesa-dev
    sudo apt-get install libglu1-mesa-dev
    sudo apt-get install libegl1-mesa-dev
    sudo apt-get install freeglut3-dev

2.2 编译

打开终端,cd到源码所在目录,执行configure程序并make,这里以编译release版本为例

powershell 复制代码
./configure -prefix  /opt/qt5.12.7  -opensource  -release  -nomake tests -skip qtvirtualkeyboard 

 接着执行make 命令
 make -j4

2.3 遇到的问题

编译过程遇到了一些问题,记录如下

1)问题一

powershell 复制代码
/usr/bin/ld.gold:错误:cannot find -lclip2tri
/usr/bin/ld.gold:错误:cannot find -lpoly2tri
/usr/bin/ld.gold:错误:cannot find -lclipper

该问题的原因是qtlocation模块未编译完整,重新执行 make -j4 module-qtlocation 命令 可消除此错误,也可以在执行configure命令的时候添加 -skip qtlocation 来跳过编译。

2)问题二

xcb-xfixes development package not found

这个问题的解决方式是安装对应的软件包,执行下面的命令来安装,安装之后重新执行 make -j4。

powershell 复制代码
sudo apt-get install libxcb-util0-dev

2.4 安装

除此之外还有其他一些小问题,根据错误提示就能解决,没记录下来。

make 结束之后,执行 sudo make install 命令,会将编译好的Qt开发环境安装到之前设置的目录下 /opt/qt5.12.7 。

3.编译qtwebengine

qtwebengine是后期需要引入echarts时才编译的,编译过程中也遇到了一些奇怪的问题,特在此记录下来备忘。qtwebengine需要用到qmake及Qt的一些核心库,因此必须先确保第3节中的qt编译完成。

3.1 安装依赖库

sudo apt-get install bison build-essential gperf flex libasound2-dev\
libcups2-dev libdrm-dev libegl1-mesa-dev libnss3-dev libpci-dev\
libpulse-dev libudev-dev nodejs libxtst-dev gyp ninja-build\
libssl-dev libxcursor-dev libxcomposite-dev libxrandr-dev

在安装 libnss3-dev 时报错,大概意思是版本不对,使用sudo apt-get install libnss3-dev = xxxversion ,安装成功。错误如下:

bash 复制代码
ibnss3-dev : 依赖: libnss3 (= 2:3.49.1-1kylin1.5) 但是 2:3.49.1-1kylin1.6 正要被安装

解决方法,安装指定版本的依赖包:

sudo apt-get install libnss3=2:3.49.1-1kylin1.5

3.2 编译

打开终端, cd 到 src/qtwebengine 目录下,执行命令:

bash 复制代码
../qtbase/bin/qmake qtwebengine.pro

3.3 遇到的问题

  • gperf not found

执行完qmake 命令后报错:gperf not found,以为gperf 没有安装成功,再次使用apt-get 安装缺少的依赖,sudo apt-get install gperf ,安装完成后需要将configure命令生成的缓存清除掉然后重新执行configure 命令,并再次执行qmake,命令如下:

bash 复制代码
rm config.cache
./configure -prefix  /opt/qt5.12.7  -opensource  -release  -nomake tests -skip qtvirtualkeyboard 
../qtbase/bin/qmake qtwebengine.pro
make -j4
  • X11/Xlib-xcb.h 找不到
    不出意外开始编译了,经过漫长的等待,编译又出错了,这次遇到的是:fatal error X11/Xlib-xcb.h 文件不存在。第一感觉是缺少对应的库,经过一番查找发现需要安装 libx11-dev ,于是执行 sudo apt-get install libx11-dev ,成功安装后仍然报错。通过find命令查找该头文件,确实没有找到 find /usr -name Xlib-xcb.h 。 我耐着性子查询了很多资料还是没能解决问题,这时只剩下最后一条路了,那就是下载libx11-dev源码,从libx11地址下载系统libX11版本对应的libx11-dev源码后,与当前系统/usr/lib/include/X11 目录进行比较发现系统重确实少了Xlib-xcb.h 文件,而下载的源码中刚好有这个文件,于是将 Xlib-xcb.h 复制到 /usr/lib/include/X11 目录下,重新执行 make -j4 继续编译。
  • libXlib-xcb.so 找不到
    又是漫长的等待过后报了一个错,这次是 libXlib-xcb.so 找不到,通过find命令发现在 /usr/lib/aarc-linux-agnuabi/ 目录下有这个库,根据报错信息提示在/usr/lib/arrc-linux-gnu/ 目录下创建了一个 软连接 ln -s /usr/lib/aarc-linux-agnuabi/libXlib-xcb.so libXlib-xcb.so, 接着再次执行make -j4 ,这次没有提示libXlib-xcb.so 找不到,而是提示libXlib-xcb.so 不兼容。
  • libXlib-xcb.so 不兼容
    针对这个问题,我打算重新编译libXlib 库。首先安装libtool 和 autoconfig
bash 复制代码
sudo apt-get install libtool autoconf

切换到libXlib 源码根目录下 执行

bash 复制代码
 ./autogen.sh
 configure.ac:24: error: must install xorg-macros 1.15 or later before running autoconf/autogen

下载对应的 rpm 安装包,下载地址

bash 复制代码
sudo rpm -ivh xorg-x11-util-macros-1.19.3-4.el9.noarch.rpm --nodeps --force

安装后再次执行

bash 复制代码
./autogen.sh
make 

编译结束后会生成libXlib-xcb.so ,把库拷贝到/usr/lib 目录下, 删除之前创建的 /uar/lib/arg-linux-gnu 目录下的软连接,重新创建对应的软连接,然后回到qtwebengine 根目录下再次 执行 make -j4

  • open CFI at the end of file; missing .cfi_endproc directive
    这个问题是qtwebengine 编译过程中由于占用内存太多,而系统内存不足导致的报错。我用的设备内存是8G,交换空间是9G,为了解决这个问题将交换空间增加了20G,最终才编译成功。

以下是增加交换空间用到的几个命令:

bash 复制代码
#创建swap文件
mkdir -p /var/cache/swap
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=1G count=20
#转换swap文件
sudo mkswap -f /var/cache/swap/swap0
#激活swap文件
sudo swapon /var/cache/swap/swap0
#卸载
sudo swapoff /var/cache/swap/swap0
#永久生效
sudo vim /etc/fstab
#写入以下内容:
/var/cache/swap/swap0 none swap defaults 0 0

再次执行make -j4这次成功生成了 libQt5WebEngine 等几个qtwebengine 用到的库。

3.4 安装

在qtwebengine 根目录下执行sudo make install ,生成的库会自动安装到/opt/qt5.12.7目录下。

4.配置开发环境

首先在软件商店中下载并安装QtCreator,安装完成之后配置QtVersion 、编译器、Kits等。可以参考这篇文章配置链接

5.测试

新建一个项目,运行测试。这里遇到一个问题,程序可正常编译运行,但是源码文件确报错 unexpected class name,这是因为缺少一个软件包,通过安装这个软件包解决了此问题,安装命令如下:

powershell 复制代码
sudo apt-get install libclang-common-8-dev

安装完成后重启QtCreater,不会再出现上面的问题了。

6.程序无法输入中文的问题

经过查询发现是插件问题,自己编译的qt开发环境中缺少插件 libfcitxplatforminputcontextplugin.so,这里有两个办法解决这个问题,一个是下载源码自己编译该插件,另一个是在系统中找到这个插件,并拷贝到对应的插件目录中。这里采用第二种方式解决了该问题,如果第二种方式不能解决,那就尝试用第一种方式自己编译插件吧。

总结

从零开始搭建麒麟系统arm平台下的Qt开发环境还是挺折磨人的,在这个过程中会遇到很多新的问题,只有自己动手实践一遍才能真正体会。我把完整的qt环境上传到git上了,如果你也刚好需要而又不想折腾的话可以直接下载使用。下载地址:

以上就是本篇的所有内容了,欢迎评论区留言讨论!!!

相关推荐
捕鲸叉14 分钟前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer18 分钟前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
Peter_chq21 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
青花瓷2 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
幺零九零零3 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
捕鲸叉3 小时前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
徒步僧4 小时前
ThingsBoard规则链节点:RPC Call Reply节点详解
qt·microsoft·rpc
Dola_Pan4 小时前
C++算法和竞赛:哈希算法、动态规划DP算法、贪心算法、博弈算法
c++·算法·哈希算法
yanlou2334 小时前
KMP算法,next数组详解(c++)
开发语言·c++·kmp算法
小林熬夜学编程4 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法