2010-11-27 60 views
0

我試圖在Ubuntu 10.10上針對libwireshark編譯一個程序。我已安裝wireshark-dev程序包,該程序包已安裝/usr/lib/wireshark/usr/include/wireshark中的文件。針對libwireshark編譯

我的C源代碼文件的頭部包含#include <epan/epan.h>指令和我的gcc命令行參數如下:

$ gcc -I/usr/include/wireshark `pkg-config --libs --cflags glib-2.0` -Wall -o test.out test.c -L/usr/lib/wireshark -lwireshark 

然而,這將返回許多錯誤,包括:

/usr/lib/gcc/i686-linux-gnu/4.4.5/include/varargs.h:4: error: #error "GCC no longer implements <varargs.h>." 
/usr/include/wireshark/epan/ftypes/ftypes.h:258: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘union’ 

什麼我應該做些什麼來糾正這些問題?

回答

2

這似乎是一個用戶不友好的包裝和代碼組織的簡單情況。您需要首先爲Wireshark包含「config」標頭。我會這樣寫:

#include <wireshark/config.h> /* needed by epan */ 
#include <epan/epan.h> 

確保您首次執行此操作時,只要包含此庫中的頭文件。

我怎麼知道的?我挖掘到epan/proto.h,發現它僅在沒有設置HAVE_STDARG時纔有條件地包含varargs.h。然後我在/usr/include/wireshark/中找到grep'd,發現這個變量是在config.h中設置的,所以我覺得可能需要包含它,而且它是。

我還需要添加-lwiretap以滿足與libwireshark的鏈接。

wireshark-dev組織中的另一個特點是它不依賴(在包級別)wireshark-common,儘管後者確實提供了前符號鏈接的實際libwireshark.so。所以你應該確保已安裝wireshark-common,或者/usr/lib/libwireshark.so及其指示物存在。

+0

你,先生,是冠軍!非常感謝你。所有正確的文件似乎都已準備就緒(可能來自以前的嘗試),但最好還是留下後面的文件。 – 2010-11-27 06:48:47