银河麒麟V10交叉编译环境搭建

       一个交叉编译环境搞3、4天还弄不好,一路过来全是坑,仅此以记录。

  1. 查看目标机条件

在目标机查看CPU架构,本次加固计算机CPU型号为FT2000/4, 架构aarch64

命令行输入 ldd --version,查看GLIBC版本,就是对应C和C++的标准(在交叉编译qt时需要保证工具链一致)

命令行输入gcc --version, gcc最高使用5.4.0版本,更高可能不兼容,低版本可以

  1. 虚拟机环境搭建

VM虚拟机加载Ubuntu系统(Ubuntu开发工具最全),安装了qt-opensource-linux-x64-5.12.10.run,MVS客户端,开发环境配置不是本次重点,不详细介绍了

  1. 下载交叉编译器

宿主机(虚拟机)是x86_64,目标机是aarch64

所以下载gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu.tar.xz,具体版本可用自己找。

解压缩,(一开始用的10.3版本,目标机不兼容)使用命令行sudo cp gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz /opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz,

xz -dk gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar

解压之后需要在/etc/profile文件末尾插入一行,sudo vi /etc/profile,然后按i插入

export PATH=/opt/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH

插入之后按esc,输入:wq。

如果编辑profile键盘不好用,需要卸载vi-common,再重装vi。

修改之后source /etc/profile

命令行aarch64-none-linux-gnu-g++ --version查看是否成功

可以尝试类似apt install gcc-arm-linux-gnueabi,看是否更简单

查看GLIBC_版本是否与目标机一致,不一致会出现兼容问题。GLIBC向下兼容,比目标机版本号大不兼容。后面我又换成gcc5.3.1 和 qt5.7.0,使用的版本自行对应。

  1. 交叉编译QT

1、下载qt源码,qt-everywhere-src-5.12.10.tar.xz,然后解压缩

sudo xz -dk qt-everywhere-src-5.12.10.tar.xz

sudo tar -xvf qt-everywhere-src-5.12.10.tar

进入文件夹qt-everywhere-src-5.12.10内

修改qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf 编译器为交叉编译器,主要是14~23

2、安装所依赖的库

1)、安装基础编译环境

sudo apt-get install libxcb-xinerama0-dev

sudo apt-get install build-essential perl python git

sudo apt-get install freeglut3-dev

sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev

2)、安装编译Libxcb的相关依赖

sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev

3)、安装编译Qt WebKit的相关依赖

sudo apt-get install flex bison gperf libicu-dev libxslt-dev ruby

4)、安装编译Qt WebEngine的相关依赖

sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libdbus-1-dev libfontconfig1-dev libcap-dev libxtst-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libxss-dev libegl1-mesa-dev gperf bison

5)、安装编译Qt Multimedia的相关依赖

sudo apt-get install libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

若是报错则安装最新版本

sudo apt -y install libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

6)、安装编译QDoc的相关依赖

sudo apt install libclang-6.0-dev llvm-6.0

7)、安装clang-8

sudo apt-get install clang

sudo apt-get install clang-8

8)、进入文件夹qt-everywhere-src-5.12.10内,执行命令行,

./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/Qt-5.14.2-aarch64 -c++std c++11 -nomake examples -make libs    -skip qtpurchasing   -skip qtvirtualkeyboard    -skip qtwayland     -skip qtwebchannel     -skip qtwebsockets    -skip qtdatavis3d    -skip qtgamepad    -skip qtlocation     -skip qtremoteobjects     -skip qtscript     -skip qtscxml     -skip qtsensors     -skip qtspeech     -skip qtsvg     -skip qtwebengine     -skip qtwebview     -skip qtwinextras     -skip qtx11extras     -skip qtxmlpatterns  -opengl -silent -qpa linuxfb

./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/Qt-5.14.2-aarch64 -c++std c++11 -nomake examples -no-opengl -silent

./configure -release -opensource -confirm-license -xplatform linux-arm-gnueabi-g++ -prefix /usr/local/Qt-5.7.0-aarch64 -c++std c++11 -nomake examples -no-opengl -silent -make libs -pkg-config -xkbcommon -qpa xcb

./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /usr/local/Qt-5.12.10-aarch64 -c++std c++11 -nomake examples -no-opengl -silent -make libs -qpa xcb

./configure -release -opensource -confirm-license -prefix /usr/local/Qt-5.12.12 -c++std c++11 -nomake examples -no-opengl -nomake tests -skip qtwebengine -silent -qpa xcb

参数选项可以根据需求自己配置,configure打印结果中用到的qt模块要检查一遍,缺东西的话重新configure,多configure几次什么也不影响。

9)、交叉编译

执行sudo make -j 8

-j 8是多核并行执行的核数,根据自己配置的虚拟机来定

10)、安装

如果make没报错的话,执行命令:

sudo make install

可以到文件夹/usr/local/Qt-5.14.2-aarch64查看

  1. 交叉编译程序

QT现在高级了,可以添加交叉编译器,在菜单工具->选项 中配置套件

编译器已自动检测到GCC(/opt/gcc-arm那个),没检测到重启系统试一下,实在不行可以手动添加

手动设置交叉编译的QT库

然后手动添加套件

叹号也没关系,因为缺少调试器

给项目工程添加生成配置,构建了一个aarch64-GCC的release版本

执行qmake,构建项目

不幸的是,交叉编译的时候忘了选qtchart模块了,编译报错提示缺少这个so,没关系可以追加。

Index of /archive/qt/5.14/5.14.2/submodules

去官网下载模块的源码qtcharts-everywhere-src-5.14.2.tar.xz

然后拷贝到/home/ycz下解压,这次交叉编译简单,直接用qt打开qtcharts-everywhere-src-5.14.2中的qtcharts.pro工程,使用aarch64-GCC套件进行编译。

编译成功后,进入build-qtcharts-aarch64_GCC-Release目录,命令行执行

sudo make install

文件夹/usr/local/Qt-5.14.2-aarch64查看已经有了qtchart部分,再重新编译自己的工程ok。

  1. 移植

把交叉编译后的Qt-5.14.2-aarch64 和 程序,拷贝到目标机,

修改/etc/profile增加QT库的路径,详见脚本env.sh;再执行source /etc/profile

再执行install.sh或启动程序

  1. (跳过此步)移植XCB

由于银河麒麟V10的窗口系统使用的是Xserver + Xwayland方式,wayland端需要xcb库的支持才能正常显示,在交叉编译QT前需要添加对XCB的支持。

https://www.x.org/releases/individual/xcb/

下载xcb-proto.1.11.tar.gz

解压后,./configure --prefix=/opt/gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu --host=aarch64-linux-gnu --enable-option-checking

Make

Make install

还需要sudo apt-get install xsltproc

交叉编译X11

  1. linuxdeployqt打包

照着 银河麒麟桌面操作系统V10 Qt应用开发者打包指南.pdf 在目标机上装上linuxdeployqt和appimage,注意不能用最新版本,会报缺少qtquick和qtwebengine,下载了2021和2020年的版本可以用,版本大概是linuxdeployqt 6

在新建的文件夹里拷过来执行程序,新建一个desktop文件,找个图标。就可以打包了

Linuxdeployqt  *.desktop  -appimage

可能会缺些库,把用到的qt交叉编译的库拷进来。

再使用install.sh的脚本,就可以实现安装运行了。

<think>好的,用户想在银河麒麟操作系统(ARM64架构)上进行编译,需要一份步骤指南。首先,我需要回忆银河麒麟系统的基本信息,它基于Linux,可能使用apt或yum包管理器。ARM64架构需要注意依赖库的兼容性,可能需要特定的源或安装包。 第一步通常是安装必要的开发工具,比如gcc、make、autoconf等。可能需要检查系统默认的软件源是否包含这些工具,或者是否需要添加额外的源。用户可能会遇到依赖问题,特别是如果软件包是针对x86架构的,需要确认是否有ARM64的版本。 接下来是获取源代码,用户可能需要使用git、wget或curl下载。解压源代码后,进入目录,配置编译选项。这里需要注意指定安装路径,可能需要--prefix参数。然后执行make和make install。如果是交叉编译,可能需要设置不同的工具链,但用户是在ARM64本机编译,所以可能不需要。 环境变量设置也很重要,比如PATH和LD_LIBRARY_PATH,确保新安装的库被正确识别。编译完成后,验证可执行文件是否正常运行。 用户可能遇到的问题包括依赖缺失、权限问题、编译器版本不兼容等。需要提醒用户使用sudo权限安装依赖,或者使用虚拟环境。另外,如果软件不支持ARM64,可能需要修改代码或寻找替代方案。 还需要考虑是否有银河麒麟特定的文档或社区支持,建议用户查阅官方资源。最后,生成相关问题,帮助用户进一步解决可能遇到的编译问题,比如依赖管理、环境配置、错误处理等。</think>### Galaxy Kylin OS (ARM64) 编译教程步骤指南 #### 1. 系统环境准备 - **更新软件源** 执行 `sudo apt update` 更新软件包列表(银河麒麟基于Ubuntu/Debian)[^1]。 - **安装基础编译工具** 安装GCC、make等工具: ```bash sudo apt install build-essential cmake automake libtool pkg-config ``` #### 2. 安装特定依赖 - **查找软件依赖** 若编译目标软件需要特定库(如OpenSSL),使用: ```bash sudo apt install libssl-dev ``` - **添加第三方源(可选)** 若依赖不在官方源中,需手动添加PPA或编译安装。 #### 3. 获取源代码 - **下载源码包** 使用 `wget` 或 `git clone`: ```bash wget https://example.com/source.tar.gz tar -xzvf source.tar.gz cd source/ ``` #### 4. 配置编译选项 - **生成Makefile** 典型配置命令: ```bash ./configure --prefix=/usr/local ``` 或使用CMake: ```bash mkdir build && cd build cmake .. ``` #### 5. 执行编译与安装 - **编译代码** ```bash make -j$(nproc) # 使用多核加速 ``` - **安装到系统路径** ```bash sudo make install ``` #### 6. 环境变量配置 - **添加库路径** 编辑 `~/.bashrc`: ```bash export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH export PATH=/usr/local/bin:$PATH ``` 执行 `source ~/.bashrc` 生效。 #### 7. 验证安装 - **检查版本** 运行 `your_program --version` - **运行测试用例(若有)** ```bash make test ``` --- ### 常见问题与注意事项 1. **依赖冲突** 若出现 `E: Unable to locate package`,尝试更换国内镜像源[^2]。 2. **权限问题** 编译安装到系统目录时需使用 `sudo`。 3. **ARM64特异性** 部分软件需添加 `-march=armv8-a` 编译参数优化性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值