[牛人杂谈] undefined reference to `_sbrk', `_write', `_lseek', `_read'

[复制链接]
 楼主| 643757107 发表于 2016-2-8 18:18 | 显示全部楼层 |阅读模式
现象:
         在用GCC编译嵌入式MCU程序时,由于使用了第三方的库,出现了类似undefined reference to `_sbrk', `_write', `_lseek', `_read'的连接错误。
  原因:
        使用了类似printf,malloc,fopen,fread之类的库函数,但是嵌入式MCU平台是不支持的。
解决办法:
       实现相应的库函数或者去掉。
    实际上,遇到这类问题的人往往是尝试修改了部分的函数调用,但是还是报类似的错误,那么原因就是没有修改完全,一般的库函数包括printf,malloc,realloc一类,fopen,fread一类等。值得注意的是我们往往会忽略fseeko函数,另外asset库函数里面调用了fprintf函数要注意。
   如何彻底确定所有函数被更换了呢,办法就是使用arm-none-eabi-nm 查看xxx.a是否还包含这些函数,另外也可以查看libc.a(对应的a文件)进行对比。
734774645 发表于 2016-2-9 10:23 | 显示全部楼层
注意的是我们往往会忽略fseeko函数,另外asset库函数里面调用了fprintf函数要注意。
玛尼玛尼哄 发表于 2016-2-10 13:20 | 显示全部楼层
对,就是未定义。 估计你是在调试程序遇见,若是这种情况,一般是出现了未定义的字符,需要宏定义一下。
lovecat2015 发表于 2016-2-10 13:53 | 显示全部楼层
eclipse确实是一个很好的开源软件,但是对于入门的人来说还是先用keil mdk等软件吧
yiyigirl2014 发表于 2016-2-10 18:49 | 显示全部楼层
实际上,遇到这类问题的人往往是尝试修改了部分的函数调用,但是还是报类似的错误,那么原因就是没有修改完全,一般的库函数包括printf,malloc,realloc一类,fopen,fread一类等。值得注意的是我们往往会忽略fseeko函数,另外asset库函数里面调用了fprintf函数要注意
Thethree 发表于 2016-2-14 10:02 | 显示全部楼层
有些库加的不全,你用的是eclipse吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

3931

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部

222

主题

3931

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部