当前位置: 首页 > article >正文

交叉编译工具链制作(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,将它添加入环境变量以便全局使用,任意位置打开终端查询一下

a59977f979834e3dbb0d26d9495cc7e9.png

接下来开始制作交叉编译工具链

首先选择一个非root用户可操作的路径,我这里选的是/home/yml/Music/cross-ng,因为music目录比较空,里面没有其他文件

新建三个文件夹,一个存放编译文件,一个存放源码,一个存放最终的交叉编译工具链

3afebdcf0c3148f5a560768148c3d6e2.png

通过 ct-ng list-samples查询一下,找一个跟我们的目标接近的,就选用aarch64-rpi3-linux-gnu吧

92b0285fbd7b4186a5fd8b91614a1ec1.png

进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进入配置菜单

17ed85b9b24a4956807f4dfd601d3ce5.png

由于我们是基于 aarch64-rpi3-linux-gnu/crosstool.config修改的,所以很多已经配好了,这里仅列举一下个性化的或有必要说明一下的

路径,即刚刚新建的3个文件夹路径

509f7a1d91f549048eec7d917b0362c1.png

目标平台架构和位数,aarch64也选arm

93e587d9c258413bbbae291c6e096613.png

操作系统和内核版本

cd54211bd4bd4bd9af102a2e3dfc44bd.png

GLIBC版本

68fb4ec84941434bb92a4e28574230ee.png

最小内核版本

542e78e019b14c30980cf765ddb6a553.png 

编译器版本

 

c035bf44f8d84e2e99fb5b6a5589ad8c.png

大致就这样,接下来保存.config,输入ct-ng build开始构建 

d7c6c1a1905d4be3ad6092ed32725524.png

可以看到构建开始了,但是进度太慢,因为要先下载各种组件包,然后进行编译,而我啥也没有提前准备

具体包含
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目录下,下边是全放好的状态,也可以下载其中比较大的包,其余的任由它自动下载

3edd9bb43476439ebbc4bd85c4f459d5.png

接下来再运行ct-ng build就很快了

804efbefa81746ff86df649735e88767.png ea6b8215636a4bff893abaab9576b816.png

最终完成构建 ,生成的东西都在x-tools目录下

9a4ce9f8cca84d2cb58650e12545b493.png

测试编译了一个hello例程,可以正常运行 

 


http://www.kler.cn/a/390816.html

相关文章:

  • webpack loader全解析,从入门到精通(10)
  • 同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡
  • 【Spring】@Autowired与@Resource的区别
  • 【p2p、分布式,区块链笔记 DAM】GUN/SEA(Security, Encryption, Authorization) 模块genkey
  • 超市里的货物架调整(算法解析)|豆包MarsCode AI刷题
  • Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令
  • 【MATLAB代码】结合匀速运动 (CV) 和匀加速运动 (CA) 模型的EKF构造的IMM(交互式多模型)
  • 安卓属性动画插值器(Interpolator)详解
  • LeetCode:703. 数据流中的第 K 大元素
  • 大模型-微调与对齐-RLHF
  • Python使用Faker库生成伪数据
  • 从0开始学 docker (每日更新 24-11-8)
  • leetcode21. Merge Two Sorted Lists
  • Leetcode 检测相邻递增子数组
  • LeetCode 93-复制 IP地址
  • MYSQL知识总结
  • uni-app选项卡制作 ⑥
  • 【网络安全渗透测试零基础入门】之SNMP放大攻击原理及实战演示,零基础入门到精通,收藏这一篇就够了!
  • 【c语言】memmove函数的使用和模拟实现
  • 【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设备
  • Redis在docker中的主从,哨兵配置
  • kafka消费者的消费分区策略有哪些,默认是哪个?
  • C#-命名空间
  • qsqlmysql.lib的编译和使用
  • Java接收xml格式参数转为json
  • sql注入基础知识