2013-02-15 11 views
5

Devo abbinare la firma per la chiamata getnameinfo così posso scrivere un wrapper attorno a quella chiamata. Sfortunatamente la firma cambia tra gli host.le modifiche alla firma di getnameinfo tra le versioni di glibc, come posso abbinarlo?

Le cose stavano lavorando e andando scoperta fino a quando ho provato a compilare sulle ultime CentOS, 6.3, che dà l'errore:

error: conflicting types for 'getnameinfo' 

Eh?

Si scopre che l'argomento finale, flags, è elencato come int unsigned su CentOS (glibc-headers-2.12-1.80) ma è solo un int su Fedora (glibc-headers-2.15-58). (Si noti che le pagine man su entrambi gli host dicono che dovrebbe essere un int.)

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

vs

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

qualche ricerca mi porta a credere che the standard has changed the type dell'argomento bandiere.

Sembra che ho bisogno di cambiare il tipo di flag nella mia funzione per abbinare la definizione dell'host. Qual è il modo migliore per affrontare questo problema? Si tratta di un problema di tipo autoconf o esiste una soluzione più semplice? Speravo che il compilatore (gcc) avrebbe avuto qualche macro che avrei potuto sfruttare ma non riesco a trovare nulla.

risposta

3

si potrebbe verificare la macro __GLIBC_MINOR__ definito features.h e passare gli argomenti di conseguenza, ad esempio:

#include <features.h> 

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

Grazie. In realtà è il contrario,> 12 non dovrebbe avere nulla, ma il jist aveva ragione. Come hai scoperto __ GLIBC_MINOR __? –

+0

@PaulRubel Ho letto su di loro da qualche parte in realtà non ricordo :) c'è anche un '__GLIBC__' per la versione principale. – iabdalkader

Problemi correlati