使用GCC Arm工具链开发的项目, 在11.2下编译正常, 但是升级到 arm-gnu-toolchain-11.3.rel1 以及 arm-gnu-toolchain-12.2 之后, 编译出现警告

/opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-closer.o): in function `_close_r':
/data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/closer.c:47: warning: _close is not implemented and will always fail
/opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-fstatr.o): in function `_fstat_r':
/data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/fstatr.c:55: warning: _fstat is not implemented and will always fail
/opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-isattyr.o): in function `_isatty_r':
/data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/isattyr.c:52: warning: _isatty is not implemented and will always fail
/opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/bin/ld: /opt/gcc-arm/arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-eabi/bin/../lib/gcc/arm-none-eabi/11.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc_nano.a(libc_a-lseekr.o): in function `_lseek_r':
/data/jenkins/workspace/GNU-toolchain/arm-11/src/newlib-cygwin/newlib/libc/reent/lseekr.c:49: warning: _lseek is not implemented and will always fail

这是因为使用了printf, 定义了 int _read(int file, char *ptr, int len)int _write(int file, char *ptr, int len)方法但是未定义其它方法所致.

一个完整的输入输出重定向需要包含以下函数, 把剩下的都补齐就不会提示警告了

int _isatty(int fd);
int _write(int fd, char* ptr, int len);
int _close(int fd);
int _lseek(int fd, int ptr, int dir);
int _read(int fd, char* ptr, int len);
int _fstat(int fd, struct stat* st);

首先引入必要的头文件

#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>

然后是固定的方法


__attribute__((weak)) int _isatty(int fd)
{if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)return 1;errno = EBADF;return 0;
}__attribute__((weak)) int _close(int fd)
{if (fd >= STDIN_FILENO && fd <= STDERR_FILENO)return 0;errno = EBADF;return -1;
}__attribute__((weak)) int _lseek(int fd, int ptr, int dir)
{(void)fd;(void)ptr;(void)dir;errno = EBADF;return -1;
}__attribute__((weak)) int _fstat(int fd, struct stat *st)
{if (fd >= STDIN_FILENO && fd <= STDERR_FILENO){st->st_mode = S_IFCHR;return 0;}errno = EBADF;return 0;
}

_read 和 _write 是与底层硬件实现相关的, 需要自己实现对应的字符输入和输出


__attribute__((weak)) int _read(int file, char *ptr, int len)
{(void)file;int DataIdx;for (DataIdx = 0; DataIdx < len; DataIdx++){*ptr++ = __io_getchar();}return len;
}__attribute__((weak)) int _write(int file, char *ptr, int len)
{(void)file;int DataIdx;for (DataIdx = 0; DataIdx < len; DataIdx++){__io_putchar(*ptr++);}return len;
}

GCC Arm 11.3rel1, 12.2编译提示 _close is not implemented and will always fail相关推荐

  1. GCC Arm 12.2编译提示 LOAD segment with RWX permissions 警告

    使用GCC Arm工具链开发的项目, 在升级到 arm-gnu-toolchain-12.2 之后, 编译出现警告 arm-gnu-toolchain-12.2.mpacbti-bet1-x86_64 ...

  2. ubuntu 11.10下载和编译Android源码

    ubuntu 11.10下载和编译Android源码 由衷感谢网上的各个博主的文章,给了小弟我莫大的帮助.这里呢,小弟也把自己的经历记录下来,以供大家参考^^.这篇应该算是零基础.从无到有的流程介绍了 ...

  3. GCC编译器原理(二)------编译原理一:目标文件

    一.目标文件 在 UNIX® 和 Linux® 中,任何事物都是文件.UNIX 和 Linux 编程实际上是编写处理各种文件的代码.系统由许多类型的文件组成,但目标文件具有一种特殊的设计,提供了灵活和 ...

  4. An Introduction to GCC - 2 Compiling a C program (编译 C 程序)

    An Introduction to GCC - 2 Compiling a C program (编译 C 程序) for the GNU Compilers gcc and g++ Brian G ...

  5. OpenCV4.0.1/4.0.0/3.4.2 + Contrib + Qt5.9 + CMake3.12.1编译及踩坑笔记、Qt5+OpenCV配置、代码验证、效果图、福利彩蛋

    Table of Contents 前言 Windows 10, OpenCV4.0.1, Qt5.9.3, CMake3.12.1, MinGW5.3.0 Windows 10, OpenCV4.0 ...

  6. 读《构建之法》第11,12章有感

    读<构建之法>第11,12章有感 今天我读了<构建之法>的11,12章,其中第11章主要讲了软件的设计与实现的一些知识,告诉我们具体如何去开发一个软件.而第12章则为我们介绍了 ...

  7. 分享Silverlight/WPF/Windows Phone一周学习导读(11月6日-11月12日)

    分享Silverlight/WPF/Windows Phone一周学习导读(11月6日-11月12日) 本周Silverlight学习资源更新 [Silverlight]关于对Canvas.ZInde ...

  8. ARM7 ARM 11

    ARM7是冯诺依慢结构 ARM9.ARM11是哈佛结构,所以性能要高一点. ARM9和ARM11大多带内存管理器,跑操作系统好一点,ARM7适合裸奔. 不跑操作系统,价格低一点的:ARM7.corte ...

  9. android 11.0 12.0自定义开机向导app

    1.概述 在11.0 12.0的系统产品开发中,需要自定义开机向导app页面,而系统源码中只提供了Provision作为开机向导app 有些平台没有把它编译到源码中 作为开机向导,所以自定义开机向导, ...

最新文章

  1. Spring MVC那点事儿
  2. 如何提升网站在搜索引擎中的排名?
  3. iOS 获取appstore 版本号
  4. ubuntu16.04+cuda9.0_cudnn7.5+tensorflow-gpu==1.12.0
  5. PyCharm集成Anaconda3环境下安装 腾讯优图报错 ERROR: Could not install packages due to an EnvironmentError
  6. python绘制混淆矩阵_如何实现python绘制混淆矩阵?
  7. pickle模块的基本使用
  8. Wasserstein GAN
  9. macos big sur u盘安装_老款macbook机型欺骗补丁强制安装macOS11 Big Sur图文详解
  10. linux bootstrap强制结束,Cisco UCCX bootstrap服务目录遍历漏洞
  11. MyEclipse项目无法自动编译解决方案
  12. 用法getline(cin,a)和cin.getline(a,20) 能将空格输出
  13. 2018深圳杯B题无限拓扑回传规划题解
  14. C++语法基础(1/3)
  15. 织梦采集-织梦采集教程-织梦采集插件下载教程
  16. DDR扫盲——DDR与DDR2、DDR3的区别
  17. 【原创】被误解的匈牙利命名法
  18. ps调色滤镜库:ON1 Effects 2019 mac
  19. 【浅刷Java数据结构】Leetcode 606 根据二叉树创建字符串
  20. 关于过快S验证码的一些问题

热门文章

  1. being搜索引擎用户体验
  2. Filter Listener——概述、应用、Filter的使用 细节
  3. u盘格式化不了怎么办?分享必须掌握的好方法!
  4. 用于安全监控的实时SSH仪表板
  5. 如何设计出用户体验良好的登录/注册页面
  6. input的file类型的accept属性的值
  7. java 发票打印_Java发票打印CommPortIdentifier与无符号字节的问题
  8. java write用法_java Writer的基本使用
  9. 幼儿园里如何运用计算机技术,论多媒体技术在幼儿园教学中的应用
  10. 高中毕业:如何用 15 年从小白到技术专家