加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

getnameinfo的glibc版本之间的签名更改,我该如何匹配?

发布时间:2020-12-16 05:03:21 所属栏目:百科 来源:网络整理
导读:我需要匹配调用 getnameinfo的签名,这样我就可以围绕该调用编写一个包装器.不幸的是,签名在主机之间发生 事情正在发挥作用,直到我尝试编译最新的CentOS,6.3,这给出了错误: error: conflicting types for 'getnameinfo' 咦? 事实证明,最后一个参数flags在Ce
我需要匹配调用 getnameinfo的签名,这样我就可以围绕该调用编写一个包装器.不幸的是,签名在主机之间发生

事情正在发挥作用,直到我尝试编译最新的CentOS,6.3,这给出了错误:

error: conflicting types for 'getnameinfo'

咦?

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

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

VS

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

一些搜索让我相信the standard has changed the type的旗帜参数.

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

解决方法

你可以检查在features.h中定义的__GLIBC_MINOR__宏并相应地传递参数,例如:
#include <features.h>

#if __GLIBC_MINOR__ > 12 
    getnameinfo(...,flags);
#else 
    getnameinfo(...,(unsigned) flags);
#endif

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读