gpt4 book ai didi

c - 如果重新实现一个标准库函数,调用两者中的哪一个?

转载 作者:太空狗 更新时间:2023-10-29 17:25:32 28 4
gpt4 key购买 nike

如果一个库函数像malloc 被重新实现,然后有两个具有该名称的符号,一个在本地目标文件中,一个在系统库中。当来自例如的函数时使用两者中的哪一个使用了 stdio,它调用了 malloc(为什么)?

最佳答案

一般来说,链接行为是:

  • 包括目标文件中定义的所有符号。
  • 然后使用库中的对象解决未定义的问题。

因此,如果 malloc 被重新实现并链接为目标文件,目标文件中的版本将覆盖标准库中的版本。但是,如果新的 malloc 作为库链接,则取决于库链接顺序。

另一种方式,将 gnu binutils 视为范围,覆盖库函数是使用 --wrap 参数包装函数:https://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_3.html

通过使用 --wrap ld 选项,我们可以链接两个函数,包装函数将能够调用包装函数。

链接顺序还取决于命令行参数顺序。所以我在这里考虑将库列在对象之后,因为一般来说,将库放在对象之前没有意义,因为它们的目标是提供那些对象所需的缺失符号。

关于c - 如果重新实现一个标准库函数,调用两者中的哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639205/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com