在glibc版本之间的getnameinfo的签名更改,我怎么能匹配它?

我需要匹配调用getnameinfo的签名,所以我可以围绕这个调用写封装。 不幸的是主机之间的签名改变。

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

error: conflicting types for 'getnameinfo' 

咦?

事实certificate,最后一个参数flags在CentOS(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); 

有些search引导我相信标准已经改变了标志参数的types 。

它看起来像我需要改变我的函数中的标志types,以配合主机的定义。 处理这个问题的最好方法是什么? 这是一个autoconftypes的问题,还是有一些更简单的解决scheme? 我希望编译器(gcc)有一些我可以利用的macros,但是我找不到任何东西。

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

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