Thrift-0.10.0 CenOS 7 編譯錯誤 error: expected ')' before 'PRIu32'


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM