【发布时间】:2020-01-31 23:37:11
【问题描述】:
当与gcc 一起使用时,我想为newlib-nano 提供malloc 的实现。在我的情况下,我有一些源文件,比如main.c,它调用strftime。 strftime 的 newlib-nano 实现使用 malloc。在头文件my_memory.h 中,我声明了一个函数void *malloc(size_t size),并在相应的my_memory.c 文件中提供了一个实现。
使用gcc 链接项目时,由于malloc 的多个定义,链接器在.../libc_nano.a(liba-malloc.o) 处失败。我希望链接器采用我的malloc 实现而不是拉newlib-nano 的行为,但保留使用newlib-nano 的其他标准库函数的实现,例如memset.
我在 gcc 中搜索了“从静态库中排除目标文件”选项,试图排除 libc_nano.a(liba-malloc.o),但没有成功。请注意,编译器正在拉入此目标文件,而我无权访问编译器的libc_nano.a 以使用我自己的目标文件修补liba-malloc.o。
无论如何,我是错过了什么,还是无法实现我想要实现的目标?
【问题讨论】:
-
您可以用您的源文件替换他们的源文件,但您的里程可能会有所不同。他们的
malloc很可能更高效、功能更丰富,而且无论如何都是你的。 -
@SSAnne 我无权从
libc_nano.a共享库访问编译器的目标文件,也无权访问源代码,所以我不确定这会如何工作吗? -
啊。那你不能。无论如何,手写代码可能更容易出现错误;他们的实现很可能比你的更受考验。