交叉编译工具链制作(RK3588用)
最近在RK3588上跑QT程序,遇到GLIBC2.33 not found异常。RK3588用的Ubuntu20,glibc是2.31的,开发板厂商提供的交叉编译器是10.3,glibc库是2.33的,因此无法运行,趁此机会学习一下自己制作交叉编译工具链,顺便解决这个问题。
选择使用crosstool-ng工具
crosstool-NG下载crosstool-ng-1.26.0.tar.xz,解压缩后进入crosstool-ng-1.26.0目录
./configure --prefix=/opt/crosstool-ng
然后make加make install,中间如果遇到报错自行安装依赖,我这里是提前安装了这些,没有报错
sudo apt install texinfo help2man gawk libtool-bin unzip libncurses-dev
编译安装完毕后生成ct-ng,将它添加入环境变量以便全局使用,任意位置打开终端查询一下
接下来开始制作交叉编译工具链
首先选择一个非root用户可操作的路径,我这里选的是/home/yml/Music/cross-ng,因为music目录比较空,里面没有其他文件
新建三个文件夹,一个存放编译文件,一个存放源码,一个存放最终的交叉编译工具链
通过 ct-ng list-samples查询一下,找一个跟我们的目标接近的,就选用aarch64-rpi3-linux-gnu吧
进crosstool-ng-1.26.0目录下,把crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config拷过来,并改名为.config,我们基于这个来进行调整
cp ../crosstool-ng-1.26.0/samples/aarch64-rpi3-linux-gnu/crosstool.config .config
输入ct-ng menuconfig进入配置菜单
由于我们是基于 aarch64-rpi3-linux-gnu/crosstool.config修改的,所以很多已经配好了,这里仅列举一下个性化的或有必要说明一下的
路径,即刚刚新建的3个文件夹路径
目标平台架构和位数,aarch64也选arm
操作系统和内核版本
GLIBC版本
最小内核版本
编译器版本
大致就这样,接下来保存.config,输入ct-ng build开始构建
可以看到构建开始了,但是进度太慢,因为要先下载各种组件包,然后进行编译,而我啥也没有提前准备
具体包含
binutils-2.40
expat-2.5.0
gcc-9.5.0
gdb-13.2
gettext-0.21
glibc-2.31
gmp-6.2.1
isl-0.26
libiconv-1.16
linux-5.10.185
mpc-1.2.1
mpfr-4.2.1
ncurses-6.4
zlib-1.2.13
zstd-1.5.5
所以需要自行下载组件包,放到cross-ng/src目录下,下边是全放好的状态,也可以下载其中比较大的包,其余的任由它自动下载
接下来再运行ct-ng build就很快了
最终完成构建 ,生成的东西都在x-tools目录下
测试编译了一个hello例程,可以正常运行