c - getnameinfo 的签名在 glibc 版本之间发生变化,我该如何匹配它?

标签 c linux gcc posix

我需要匹配调用 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。 (请注意,两个主机上的手册页都说它应该是一个整数。)

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

对比

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

关于c - getnameinfo 的签名在 glibc 版本之间发生变化,我该如何匹配它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14902553/

相关文章:

c - 为什么 FT_Load_Char 给我一个垃圾字形位图?

python - 试图导入模块 : undefined symbol: PyUnicodeUCS4_DecodeUTF8

c++ - 在 RHEL6 : How to distribute the software? 上用最近的 gcc 编译

c - 函数名中的指针/指针函数

c - 在 Vim 插入模式下按下 Tab 键后得到的 Tab 数

c++ - 如何使变量值在 c/c++ 中的函数调用之间持久化

linux - 我在编写 "For Loop"语句时遇到问题,该语句检查文本文件以查看其中是否存在每个语句

c - 使用 C_INCLUDE_PATH 的 gcc 标题搜索路径

c - (-1 >= sizeof(buffer)) 怎么可能是真的?程序无法获得正确的比较结果

c++ - `decltype` 作为模板函数声明中模板类型规范的一部分