2013-02-15 10 views
5

Muszę dopasować podpis do wywołania getnameinfo, więc mogę napisać opakowanie wokół tego połączenia. Niestety zmiany podpisów między hostami.Zmiany sygnatury getnameinfo między wersjami glibc, jak mogę je dopasować?

Rzeczy pracę i będzie find aż Próbowałem skompilować najnowsze CentOS, 6,3, co daje błąd:

error: conflicting types for 'getnameinfo' 

co?

Okazuje się, że ostatni argument, flags, jest wymieniony jako unsigned int na CentOS (glibc-headers-2.12-1.80), ale jest tylko int na Fedorze (glibc-headers-2.15-58). (Zauważ, że strony człowiek na obu hostach powiedzieć powinno być int.)

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

vs

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

poszukiwaniach prowadzi mnie do przypuszczenia, że ​​the standard has changed the type argumentu flagi.

Wygląda na to, że muszę zmienić typ flag w mojej funkcji, aby pasowały do ​​definicji hosta. Jaki jest najlepszy sposób na rozwiązanie tego problemu? Czy jest to problem typu autoconf, czy jest jakieś prostsze rozwiązanie? Miałem nadzieję, że kompilator (gcc) będzie miał makro, które mógłbym wykorzystać, ale nie mogę znaleźć niczego.

Odpowiedz

3

można sprawdzić __GLIBC_MINOR__ makra zdefiniowane w features.h i przekazać argumenty odpowiednio, przykład:

#include <features.h> 

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

Dzięki. W rzeczywistości jest odwrotnie,> 12 nie powinno mieć nic, ale jist miał rację. Jak się dowiedziałeś o __ GLIBC_MINOR __? –

+0

@PaulRubel Czytałem o nich gdzieś naprawdę nie pamiętam :) jest też '__GLIBC__' dla wersji głównej. – iabdalkader

Powiązane problemy