designevo

Logo通過DesignEvo設計製作

2009年4月30日 星期四

解決 netflow-tools 編譯錯誤

由於 cacti 有一個netflow viewer plugin, 但是從網站下載的 ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gzftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.68.tar.gz 解開後,在 ./configure 指令沒有開問題,但用 make 時便出現無法編譯的錯誤,情況如下:
==============================================
# makeMaking all in lib
make[1]: Entering directory `/cacti/flow-tools-0.68/lib'
make all-am
make[2]: Entering directory `/cacti/flow-tools-0.68/lib'
source='ftio.c' object='ftio.o' libtool=no \
depfile='.deps/ftio.Po' tmpdepfile='.deps/ftio.TPo' \
depmode=gcc3 /bin/sh ../depcomp \
gcc -I. -I./lib -I. -I. -I. -g -Wall -g -Wall -c `test -f 'ftio.c'
echo './'`ftio.c
ftio.c: In function 「readn」:
ftio.c:2270: 錯誤:賦值運算中的左值無效
ftio.c: In function 「writen」:
ftio.c:2295: 錯誤:賦值運算中的左值無效
make[2]: *** [ftio.o] Error 1
make[2]: Leaving directory `/cacti/flow-tools-0.68/lib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/cacti/flow-tools-0.68/lib'
make: *** [all-recursive] Error 1
===========================================

依照情況來看問題應該是 c 語言的語法有問題,所以就先修改 ftio.c 這個檔案,在錯誤的第2270行與2295行的程式改寫如下:

2270行原本程式碼:
(char*)ptr += nread;
改寫為:
ptr = (void*) ((char*) ptr) + nread ;

2296行原本程式碼:
(char*)ptr += nwritten;
改寫為:
ptr = (void*) (((char*) ptr) - nwritten) ;

將改寫後的程式存檔後再執行make 指今,發現原先的錯誤不會出現,但出現更多的相同錯誤在fttlv.c、ftchash.c 這個檔案,所以我們再按照相同方式一一修改,應該就可以了完成make動作,雖然仍會遇到一些警告但仍可以完成。

沒有留言:

資料無價

做資訊的都知道 資料備份 很重要,但當資料因不可抗力或人為失誤弄掉了!  到底會想要花多少錢來救資料? 答案常常是越少越好~  最好是 免費 .... 那誰會要去救 .... 買備份設備就跟買保險一樣,有備無患,但重要的是有沒有買對設備,有備份也要有還原測試驗証,而且最好要一段時...