赞
踩
近期因参与开发的某个软件需要适配银河麒麟v10arm 平台,于是自己搭建起一套Qt 开发环境,在此记录下具体过程,以供有需要的朋友参考。一开始手上并没有Arm架构的PC,先在Windows下用Vs2017和QtCreator 开发,软件开发快结束的时候Arm PC到了。Qt 没有提供可直接安装的arm架构安装包,只能自己通过编译Qt 来搭建开发环境。
下载Qt5.12.7,从这里下载Qt5.12.7 。一定要选择后缀为.tar.xz的源码包,zip源码包亲测编译时会遇到奇怪的问题。
打开终端,cd到源码所在目录,执行configure程序并make,这里以编译release版本为例
./configure -prefix /opt/qt5.12.7 -opensource -release -nomake tests -skip qtvirtualkeyboard
接着执行make 命令
make -j4
编译过程遇到了一些问题,记录如下
1)问题一
/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。
sudo apt-get install libxcb-util0-dev
除此之外还有其他一些小问题,根据错误提示就能解决,没记录下来。
make 结束之后,执行 sudo make install
命令,会将编译好的Qt开发环境安装到之前设置的目录下 /opt/qt5.12.7 。
qtwebengine是后期需要引入echarts时才编译的,编译过程中也遇到了一些奇怪的问题,特在此记录下来备忘。qtwebengine需要用到qmake及Qt的一些核心库,因此必须先确保第3节中的qt编译完成。
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 ,安装成功。错误如下:
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
打开终端, cd 到 src/qtwebengine 目录下,执行命令:
../qtbase/bin/qmake qtwebengine.pro
执行完qmake 命令后报错:gperf not found,以为gperf 没有安装成功,再次使用apt-get 安装缺少的依赖,sudo apt-get install gperf ,安装完成后需要将configure命令生成的缓存清除掉然后重新执行configure 命令,并再次执行qmake,命令如下:
rm config.cache
./configure -prefix /opt/qt5.12.7 -opensource -release -nomake tests -skip qtvirtualkeyboard
../qtbase/bin/qmake qtwebengine.pro
make -j4
sudo apt-get install libtool autoconf
切换到libXlib 源码根目录下 执行
./autogen.sh
configure.ac:24: error: must install xorg-macros 1.15 or later before running autoconf/autogen
下载对应的 rpm 安装包,下载地址
sudo rpm -ivh xorg-x11-util-macros-1.19.3-4.el9.noarch.rpm --nodeps --force
安装后再次执行
./autogen.sh
make
编译结束后会生成libXlib-xcb.so ,把库拷贝到/usr/lib 目录下, 删除之前创建的 /uar/lib/aarch64-linux-gnu 目录下的软连接,重新创建对应的软连接,然后回到qtwebengine 根目录下再次 执行 make -j4
以下是增加交换空间用到的几个命令:
#创建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 用到的库。
在qtwebengine 根目录下执行sudo make install
,生成的库会自动安装到/opt/qt5.12.7目录下。
首先在软件商店中下载并安装QtCreator,安装完成之后配置QtVersion 、编译器、Kits等。可以参考这篇文章配置链接
新建一个项目,运行测试。这里遇到一个问题,程序可正常编译运行,但是源码文件确报错 unexpected class name,这是因为缺少一个软件包,通过安装这个软件包解决了此问题,安装命令如下:
sudo apt-get install libclang-common-8-dev
安装完成后重启QtCreater,不会再出现上面的问题了。
经过查询发现是插件问题,自己编译的qt开发环境中缺少插件 libfcitxplatforminputcontextplugin.so,这里有两个办法解决这个问题,一个是下载源码自己编译该插件,另一个是在系统中找到这个插件,并拷贝到对应的插件目录中。这里采用第二种方式解决了该问题,如果第二种方式不能解决,那就尝试用第一种方式自己编译插件吧。
从零开始搭建麒麟系统arm平台下的Qt开发环境还是挺折磨人的,在这个过程中会遇到很多新的问题,只有自己动手实践一遍才能真正体会。我把完整的qt环境上传到git上了,如果你也刚好需要而又不想折腾的话可以直接下载使用。下载地址:https://download.csdn.net/download/zheng19880607/88241689
以上就是本篇的所有内容了,欢迎评论区留言讨论!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。