【问题标题】:Which library do I have to link for the GNU libc extension tdestroy我必须为 GNU libc 扩展 tdestroy 链接哪个库
【发布时间】:2019-07-03 16:20:18
【问题描述】:

我正在尝试链接我用 gcc 编译器编译的 c 程序。链接器找不到符号 tdestroy,它是 libc 的 gnu 扩展(#define __USE_GNU 后跟 #include <search.h>)。是否有我必须链接的其他库才能让链接器找到此符号?

~更新~:我刚刚意识到它确实在我的 Linux 环境上链接,但在 Windows 上,我仍然收到 undefined reference to 'tdestroy' mingw/gcc 错误,即使使用 _GNU_SOURCE 而不是 __USE_GNU

【问题讨论】:

    标签: gnu glibc libc


    【解决方案1】:

    不要使用__USE_GNU。这是一个内部 GLIBc 宏。 tdestroy man page 表示您需要的宏 在开头定义为_GNU_SOURCE

    #define _GNU_SOURCE
    #include <search.h>
    void *td = tdestroy;
    int main(){}
    

    编译时没有链接器错误(不需要额外的库)。

    【讨论】:

      【解决方案2】:

      你永远不应该定义__USE_GNU(原文如此),它是一个内部符号。你需要定义_GNU_SOURCE,见Feature Test Macros

      如果您这样做,tdestroy 函数将可用。

      使用-Werror=implicit-function-declaration 构建也是一个好主意,这样缺少原型会导致编译器失败,而不是稍后导致链接器失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        • 2021-02-14
        • 1970-01-01
        • 2011-03-02
        • 2010-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多