Thrift-0.10.0 CenOS 7 編譯錯誤 error: expected ')' before 'PRIu32'
在編譯Thrift的時候,無論是Apache官網tar包,還是Github鏡像,都會出現各種錯誤,其中一個比較頭疼的就是標題描述的編譯錯誤,經過搗鼓,終於妥協性的搞定了。
make時的錯誤描述:
src/thrift/server/TNonblockingServer.cpp: In member function 'void apache::thrift::server::TNonblockingServer::TConnection::workSocket()':
src/thrift/server/TNonblockingServer.cpp:460:16: error: expected ')' before 'PRIu32'
"(%" PRIu32 " > %" PRIu64
問題原因:
使用PRIu32進行格式化的輸出的時候需要引用:#include <inttypes.h>
需要同時增加編譯宏:__STDC_FORMAT_MACROS
但是這里有一個問題,這個編譯宏必須添加在#include <inttypes.h>之前,否則無效,如果工程比較大的時候,這樣就需要保證在第一次引用#include <inttypes.h>之前添加這個編譯宏。
詳細信息可以參考stackoverflow
問題解決方法:
這個錯誤出現在編譯 src/thrift/server/TNonblockingServer.cpp 文件時,但是在這個文件中的#include <inttypes.h>之前增加編譯宏 __STDC_FORMAT_MACROS 是不起作用的,最后搜索了所有包含inttypes.h的所有文件,嘗試着更改了文件:src/thrift/Thrift.h,最后編譯成功,更改內容如下:
#ifdef HAVE_INTTYPES_H
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#endif