需求

定义了同名函数后,原来的 __attribute__((weak)) 修饰的函数并没有被覆盖 ?

解决

打开生成的 map 文件,经过搜索,只找到了原来的函数,并没有找到新定义的函数。

在头文件中增加了新定义函数的声明 int _write(int file, char *ptr, int len);, 重新编译后,打开 map 文件,就可以找到新定义的函数了。

所以这个问题还是因为没有在头文件中声明,导致 printf 再调用的时候,只找到了弱定义的 write.

参考