【问题标题】:getnameinfo's signature changes between glibc versions, how can I match it?getnameinfo 的签名在 glibc 版本之间发生变化,我该如何匹配?
【发布时间】:2013-02-15 20:09:18
【问题描述】:

我需要匹配调用getnameinfo 的签名,以便我可以围绕该调用编写一个包装器。不幸的是,主机之间的签名会发生变化。

在我尝试在最新的 CentOS 6.3 上进行编译之前,一切正常,但出现了错误:

error: conflicting types for 'getnameinfo' 

嗯?

事实证明,最后一个参数 flags 在 CentOS (glibc-headers-2.12-1.80) 上被列为 unsigned int,但在 Fedora (glibc-headers-2.15-58) 上只是一个 int。 (请注意,两台主机上的手册页都说它应该是一个 int。)

extern int getnameinfo ( /*cut*/, unsigned int __flags);

extern int getnameinfo ( /*cut*/, int __flags);

一些搜索让我相信标志参数的the standard has changed the type

看来我需要更改函数中的标志类型以匹配主机的定义。 处理这个问题的最佳方法是什么?这是一个自动配置类型的问题还是有一些更简单的解决方案?我希望编译器(gcc)会有一些我可以利用的宏,但我找不到任何东西。

【问题讨论】:

    标签: c linux gcc posix


    【解决方案1】:

    您可以检查features.h 中定义的__GLIBC_MINOR__ 宏并相应地传递参数,例如:

    #include <features.h>
    
    #if __GLIBC_MINOR__ > 12 
        getnameinfo(..., flags);
    #else 
        getnameinfo(..., (unsigned) flags);
    #endif
    

    【讨论】:

    • 谢谢。实际上恰恰相反,> 12 应该什么都没有,但是 jist 是对的。您是如何得知 __ GLIBC_MINOR __ 的?
    • @PaulRubel 我在某个地方读到过关于它们的信息,我记不得了:) 主要版本还有一个 __GLIBC__
    猜你喜欢
    • 2021-11-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2021-12-15
    • 2017-06-02
    • 2018-08-14
    相关资源
    最近更新 更多