Ubuntu20.4配置arm交叉编译环境
我是在虚拟机中配置的,如果你的嵌入式设备足够完成自己的编译,可以不考虑虚拟机的。
● 新安装的Ubuntu20.04系统请先执行以下代码
sudo apt update sudo apt upgrade
● 到aarch64下载对应的aarch64的base镜像。
● 之后执行如下命令,创建armsys文件夹,之后将刚下载的镜像拷贝到该文件夹下并且解压
cd / mkdir /armsys
● 安装一些必要的软件
sudo apt install qemu qemu-user-static binfmt-support debootstrap
● 注册aarch64的运行环境
sudo update-binfmts --enable qemu-aarch64
● 为了能在x86 Ubuntu上chroot到/armsys并执行aarch64的程序,还需要将qemu-aarch64-static拷贝到/path/to/rootfs/usr/bin/;
sudo cp -av /usr/bin/qemu-aarch64-static /armsys/usr/bin/
● 配置arrch64 Ubuntu的网关;
cp /etc/resolv.conf /armsys/etc/resolv.conf
● chroot到aarch64 Ubuntu的armsys,并安装开发库。
sudo chroot /armsys apt update apt upgrade apt install -y libopencv-dev
执行后面的update可能会报错
这个时候我们需要去检查/dev/null
rm -f /dev/null mknod -m 666 /dev/null c 1 3
以上命令也可能无法创建null ,这个时候我们只要去到对应的文件夹修改null权限为666就可以正常运行上述代码了。
● 准备x86上aarch64的编译工具。
exit sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
● 在arm环境中安装交叉编译工具,并且将/usr/bin添加到环境变量
apt-get install gcc-aarch64-linux-gnu pt-get install g++-aarch64-linux-gnu apt install vim vim /etc/profile # 将下面的一句话放到文件末尾 # export PATH="/usr/bin:$PATH" source /etc/profile # 查看gcc版本 aarch64-linux-gnu-gcc -v
编译Qt5.12.8
● 在Qt5.12.8下载对应的源码包
● 将下载完成的QT源码拷贝到对应的文件夹内,解压源码
tar -xvf qt-everywhere-src-5.12.8.tar.xz
● 解压完毕之后进入源码目录,修改文件
vim qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf # 增加一下内容 QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -lts QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a -lts
● 安装ninja
apt-get install ninja-build
● 安装xcb
下载拷贝到linux的arm环境内
之后运行如下脚本:
./configure make -j4 make install # 必须先执行proto之后再安装libxcb。如果你在libxcb ./configure的时候报错了执行下面的脚本 sudo apt install libxau-dev libpthread-stubs0-dev
当然,如果你的make命令不能执行,你需要安装一下。
● 上述执行完成之后开始编译QT
./configure -prefix /usr/bin/arm512qt5.12.8 -xplatform linux-aarch64-gnu-g++
报错,故而安装了一些额外的包
apt-get install flex apt-get install bison apt-get install gperf apt-get install libxcb* apt-get install build-essential apt-get install libgl1-mesa-dev apt-get install libglu1-mesa-dev apt-get install libegl1-mesa-dev apt-get install freeglut3-dev
如果你在编译的时候报错(numeric_limits),进入源码/qtbase/src/corelib/global 修改qglobal.h
#ifdef __cplusplus #include <type_traits> #include <cstddef> #include <utility> #include <limits> //加上这行 #endif #ifndef ASSEMBLER #include <assert.h> #include <stddef.h> #endif
如果你遇到问题 ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
./configure -prefix /usr/bin/arm512qt5.12.8
中途会报两个错误,源自于QT源码错误,只要将对应的头文件和cpp文件缺失的头包含进去就行了。(报错很明显,不需要再贴图了哈。)