1. 程式人生 > 實用技巧 >redhat 6.3下編譯淘寶tfs

redhat 6.3下編譯淘寶tfs

為什麼80%的碼農都做不了架構師?>>> hot3.png

淘寶的tfs在帽子5(rhel 5.* && centos 5.*)下面編譯不會出題,但是在6.*下面,就會有很多報錯,原因在於5.*與6.*二個版本的gcc不一樣,帽子5系列使用gcc版本是4.1.2,而新版本的6使用的4.4.6,後者對編譯的語法檢查更嚴格,使得很多程式碼在帽子5系列上編譯沒有問題,而在帽子6系統下編譯通不過。

下面我就把在帽子6.3上編譯淘寶tfs過程以及處理過程寫出來,希望對大家有所幫助。首先checkout程式碼,如圖:

經淘寶TFS開發者張友東指點,上述svn checkout直接下載的tb-common-utils最新版,這個現在直接寫最新版本有問題的,必須checkout r18及以下的版本:

svnco-r18http://code.taobao.org/svn/tb-common-utils/trunktb-common-utils

首先編譯安裝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一下,應該可以看到已經編譯安裝成功了。如圖

轉載於:https://my.oschina.net/beiyou/blog/76129