Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
C库_LIBC
minilibc
packages_软件包
【学习分享】libc切换 -- 从newlib切换到mlibc
发布于 2024-04-25 13:30:15 浏览:596
订阅该版
[tocm] # libc切换 -- newlib to mlibc ## 简介 mlibc是一个为嵌入式系统和裸机适配的libc库。它有以下特性: - 低资源占用 - OpenSource - Especially for RISC-V.. 在我们使用Scons对工程编译时,默认使用的是newlib库,我们可以在软件包管理中心去下载mlibc来替换newlib,那么这个替换的过程是怎么样的呢? 我也很好奇,所以我就通过文章把我这个探索的过程记录下来了,大家一起来看看。 既然要替换libc,那么肯定和工程构建脱不了关系,RT-Thread用什么构建工程的?Scons ## 查看mlibc中的Scons脚本 -- 所以我们得进入mlibc软件包中的SConscript查看它是如何将mlibc加入到工程构建的过程中的,查看脚本代码: ```python from building import * Import('rtconfig') cwd = GetCurrentDir() src = Glob('src/*.c') CPPPATH = [cwd + '/include'] CPPDEFINES = ['RT_USING_MLIBC', 'RT_USING_LIBC'] LIBS = ['gcc'] CCFLAGS = "-nostdinc" LINKFLAGS = " -nostdlib" AddDepend(['RT_USING_MLIBC', 'RT_USING_LIBC']) group = DefineGroup('Compiler', src, depend = ['PKG_USING_MLIBC'], CPPPATH = CPPPATH, LINKFLAGS = LINKFLAGS, CPPDEFINES = CPPDEFINES, LIBS = LIBS, CCFLAGS=CCFLAGS) Return('group') ``` 各个参数的作用如下: | 参数 | 作用 | | ---------- | ------------------------------------------------------------ | | cwd | 当前的工作目录的路径 | | src | 指定目录中所有源文件的文件对象列表 | | CPPPATH | 头文件路径 | | CPPDEFINES | 编译依赖的宏 | | LIBS | 暂时不知道其作用 | | CCFLAGS | 编译参数 -- nostdinc表示不链接工具链标准库里的头文件 (可能不准确,希望有大佬指正) | | LINKFLAGS | 链接参数 -- nostdlib表示不链接工具链的标准静态库(可能不准确,希望有大佬指正) | 通过这些参数我们编译了当前文件夹下的源文件,添加了头文件的默认查找路径,并且在编译时排除了标准库的加入,这样我们就将mlibc编进了工程里了。 那么newlib是如何排除掉的呢? ## 查看newlib的Scons脚本 观察脚本中的判断部分: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240425/ef9d643209eb9aebc670f0af0591d558.png) 在加入mlibc软件包时,会在rtconfig.h中加入一个宏定义:RT_USING_EXTERNAL_LIBC,因此在执行newlib中的构建脚本时会检测到这个宏,从而让newlib退出编译。 ## 总结 通过了解这个过程,我们可以发现整个切换过程其实是通过添加宏定义并且添加编译参数来实现的。切换完成后,我们就可以使用mlibc来作为我们的libc库了,工具链中使用的newlib就可以光荣退休了。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
比特饼干
这家伙很懒,什么也没写!
文章
10
回答
1
被采纳
0
关注TA
发私信
相关文章
1
更新软件包 没有自动下载软件包
2
点更新软件包后, 软件包并没有被下载
3
RTT加载软件包的机制是什么
4
mqtt软件包,不支持直接关闭?
5
sr04软件包排他性问题
6
有没有大神移植一个HX711称重芯片模块的软件包
7
【建议】软件包分类增加“算法”类
8
软件包ota_downloader的http_ota解析导致内存释放断言
9
RT-Thread Studio软件包
10
rc522 软件包 问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部