В моей системе (Ubuntu 10.10) htons () и htonl () объявлены в netinet / in.h.
У меня была та же ошибка, и я исправил ее, добавив -DHAVE_NETINET_IN_H к параметрам командной строки g ++ при сборке моего Thrift-сервера.
Это заставит препроцессор включить netinet / in.h в thrift / protocol / TPrototol.h, поэтому объявления hton * будут видны компилятору.
TProtocol.h содержит следующие строки, которые вызывают ошибку компилятора, когда HAVE_NETINET_IN_H не определено.
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
Это может быть ошибка в скрипте настройки Thrift, которая каким-то образом пропускает определение.