【问题标题】:What is the equivalent of GNU's --wrap linker flag in OS X linker?OS X 链接器中 GNU 的 --wrap 链接器标志的等价物是什么?
【发布时间】:2015-10-07 05:20:31
【问题描述】:

我正在尝试将使用 GNU 工具链编译的 C 程序移植到 OS X,但其默认的 ld 程序不支持 --wrap 标志,该标志存在于 GNU 的 ld 中。 这是来自 GNU ld 的手册页:

--wrap symbol
    Use a wrapper function for symbol.  Any undefined reference to sym-
    bol will be resolved to "__wrap_symbol".  Any  undefined  reference
    to "__real_symbol" will be resolved to symbol.

    This  can  be used to provide a wrapper for a system function.  The
    wrapper function should be called "__wrap_symbol".  If it wishes to
    call the system function, it should call "__real_symbol".

    Here is a trivial example:

            void *
            __wrap_malloc (size_t c)
            {
              printf ("malloc called with %zu\n", c);
              return __real_malloc (c);
            }

    If you link other code with this file using --wrap malloc, then all
    calls to "malloc" will call the function  "__wrap_malloc"  instead.
    The  call  to "__real_malloc" in "__wrap_malloc" will call the real
    "malloc" function.

    You may wish to provide a "__real_malloc" function as well, so that
    links  without the --wrap option will succeed.  If you do this, you
    should not put the definition of "__real_malloc" in the  same  file
    as  "__wrap_malloc";  if you do, the assembler may resolve the call
    before the linker has a chance to wrap it to "malloc".

有没有一种可移植的方式来实现这一点?

【问题讨论】:

  • 你的意思是ld64 不是clang
  • 谢谢,我已经更新了标题

标签: c linker clang gnu ld


【解决方案1】:

我遇到了类似的问题,但从未找到类似的问题。以下解决方法可能会有所帮助,具体取决于您的具体目标。

1) Wrapping symbols during linking on OS X

2) https://discussions.apple.com/thread/617779?start=0&tstart=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-10
    • 2016-02-19
    • 2019-07-17
    • 2014-01-05
    • 2019-04-26
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多