如果malloc
重新实现了诸如之类的库函数,则有两个具有该名称的符号,一个在本地目标文件中,一个在系统库中。当使用eg中的函数时,使用哪两个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选项,我们可以将两个函数链接起来,并且包装函数可以调用包装的函数。
链接顺序还取决于命令行参数的顺序。因此,我在这里考虑将库列在对象之后,因为通常来说,将库放在对象之前是没有意义的,因为它们的目的是提供那些对象所要求的缺失符号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句