全志科技
登录
直播中
好名字
9年用户
884经验值
擅长:可编程逻辑
私信
关注
[问答]
怎样去解决RTOS编译报错undefined reference to的问题呢
开启该帖子的消息推送
编译
FreeRTOS
把SDK默认的Freertos切换为其他RTOS后,部分用户反馈,工程中已经定义某个函数,但是在编译最后依旧会报错undefined reference to(找不到某个函数)。如何解决编译错误undefined reference to?
回帖
(1)
武妹
2021-12-29 15:51:34
解决方法
1)首先使用nm命令检查该函数所在的.a静态库,确认该静态库中是否已经包含了该函数,如果没有该函数,则检查该函数的编译是不是需要使能某些宏。
2)如果已经确认了静态库中已经包含了该函数,说明在gcc链接过程中被忽略了,则可以尝试使用以下三种方法。
把该静态库的顺序提前,如first.a中调用了second.a中的某个函数,但是编译时却报错找不到second.a的某个函数,尝试调换两个静态库的顺序。
使用-Wl,–start-group和-Wl,–end-group修饰该静态库,代表该静态库不会只检索一次,而是多次来回检索,防止遗漏。缺点如果修饰的静态库太多,会导致编译速度变慢。
使用-Wl,–whole-archive和-Wl,–no-whole-archive修饰静态库,代表该静态库的所有函数都不会被忽略,强制链接。缺点是如果该静态库中存在多余的函数,会浪费flash。
解决方法
1)首先使用nm命令检查该函数所在的.a静态库,确认该静态库中是否已经包含了该函数,如果没有该函数,则检查该函数的编译是不是需要使能某些宏。
2)如果已经确认了静态库中已经包含了该函数,说明在gcc链接过程中被忽略了,则可以尝试使用以下三种方法。
把该静态库的顺序提前,如first.a中调用了second.a中的某个函数,但是编译时却报错找不到second.a的某个函数,尝试调换两个静态库的顺序。
使用-Wl,–start-group和-Wl,–end-group修饰该静态库,代表该静态库不会只检索一次,而是多次来回检索,防止遗漏。缺点如果修饰的静态库太多,会导致编译速度变慢。
使用-Wl,–whole-archive和-Wl,–no-whole-archive修饰静态库,代表该静态库的所有函数都不会被忽略,强制链接。缺点是如果该静态库中存在多余的函数,会浪费flash。
举报
更多回帖
rotate(-90deg);
回复
相关问答
编译
FreeRTOS
编译
时报
undefined
reference
to ` _Init' 要怎么处理
呢
?
2022-05-26
2101
编译
报错
2019-04-17
2263
怎样
去
解决studio
编译
pow
报错
的问题
2022-09-26
3939
升级到
RTOS
SDK v1.5版本
编译
报错
如何解决?
2024-07-12
117
怎样
去
解决RK3328
编译
build root
报错
的问题
呢
2022-03-09
1183
RTOS
SDK:对“system_upgrade_start”的未定义引用是怎么回事?
2023-06-12
219
RT-Thread studio
编译
出现
undefined
reference
to警告怎么解决?
2023-04-04
1472
SDK
编译
linux内核修改配置
报错
如何为
去
解决
呢
2022-06-16
2644
怎样
去
解决STM32CubeMx printf重定向及
报错
的问题
呢
2021-12-02
514
怎样
去
解决Stm32出现main.c is
undefined
异常的问题
呢
2021-11-26
1252
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分