淘寶的tfs在帽子5(rhel 5.* && centos 5.*)下面編譯不會出題,但是在6.*下面,就會有很多報錯,原因在于5.*與6.*二個版本的gcc不一樣,帽子5系列使用gcc版本是4.1.2,而新版本的6使用的4.4.6,後者對編譯的文法檢查更嚴格,使得很多代碼在帽子5系列上編譯沒有問題,而在帽子6系統下編譯通不過。
首先編譯安裝tblib(tb-common-utils),裡面含有tbsys和tbnet,tfs依賴這二個庫,這裡我安裝在和tfs同一個路徑。就幾個指令。
安裝完成後應該可以看到如下目錄
表明已安裝tblib成功,接下來進入正題安裝tfs,進入tfs目錄,執行如下指令,如圖
執行完上面的步驟後,就可以看configure,和安裝其它的開源軟體一樣。
執行make,出現第一個報錯,如圖
一大堆的類型轉換錯誤,檢視Makefile,發現如下
編譯添加-Werror,使用警告的錯誤直接報error,導緻編譯出錯。修改所有的Makefile,去掉-Werror,如圖
再次make,出現了第二個報錯,如圖:
仔細看會發現,gene_session_id定義的沒有比對到原型,原因在于session_util.h沒有加stdint.h的頭檔案,如果是低版本的gcc在編譯時不會出問題,高版本就會報錯,修改session_util.h,添加stdint.h頭檔案,如下:
繼續make,出現第三個報錯,如圖
原因一樣,高版本gcc文法檢測更嚴,修改meta_server_service.cpp,在1584行,代碼裡強制類型轉換一下,如圖,添加如下紅框部分
再次make,沒有問題了,完畢後make install一下,應該可以看到已經編譯安裝成功了。如圖
---------------------------------------------------------------------------------
以下是我在編譯安裝是出現的錯誤和使用的解決方案:
make
報錯:
uuid/uuid.h;No such file or directory
解決辦法:
yum -y install libuuid-devel
本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1582294,如需轉載請自行聯系原作者