针对libwireshark进行编译

时间:2010-11-27 01:37:23

标签: gcc glib wireshark gcc-warning

我正在尝试在Ubuntu 10.10上针对libwireshark编译一个程序。我安装了wireshark-dev软件包,该软件包已在/usr/lib/wireshark/usr/include/wireshark中安装了文件。

我的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’

我该怎么做才能纠正这些问题?

1 个答案:

答案 0 :(得分:2)

这似乎是一个用户不友好的包装和代码组织的简单案例。您需要首先包含Wireshark的“config”标头。我会这样写:

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

每当您在此库中包含标题时,请务必先执行此操作。

我怎么知道?我挖到了epan/proto.h,发现只有在未设置varargs.h的情况下才有条件地包含HAVE_STDARG。然后我grep/usr/include/wireshark/中发现此变量在config.h中设置,因此我认为可能需要包含它,而且,它就是。

我还需要添加-lwiretap以满足与libwireshark的链接。

wireshark-dev组织中的另一个缺点是,wireshark-common不依赖于(在包级别),即使后者确实提供了前符号链接的实际libwireshark.so至。因此,您应确保已安装wireshark-common,或/usr/lib/libwireshark.so及其指示对象存在。