2010-11-27 65 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