5

その呼び出しのラッパーを記述できるように、呼び出し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 です。(両方のホストの man ページには、int である必要があると記載されていることに注意してください。)

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

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

いくつかの検索により、標準がフラグ引数のタイプを変更したと私は信じています。

ホストの定義と一致するように、関数内のフラグのタイプを変更する必要があるようです。この問題に対処する最善の方法は何ですか? これはautoconfタイプの問題ですか、それとももっと簡単な解決策がありますか? コンパイラ (gcc) に利用できるマクロがあることを期待しましたが、何も見つかりません。

4

1 に答える 1

3

__GLIBC_MINOR__で定義されたマクロをチェックし、features.hそれに応じて引数を渡すことができます。例:

#include <features.h>

#if __GLIBC_MINOR__ > 12 
    getnameinfo(..., flags);
#else 
    getnameinfo(..., (unsigned) flags);
#endif
于 2013-02-15T20:21:22.760 に答える