【发布时间】: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)会有一些我可以利用的宏,但我找不到任何东西。
【问题讨论】: