1

我正在尝试libwireshark在 Ubuntu 10.10 上编译一个程序。我已经安装了该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’

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

4

1 回答 1

2

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

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

确保在包含此库中的标头时首先执行此操作。

我怎么知道的?我深入epan/proto.h研究并发现它有条件地包含varargs.h仅 ifHAVE_STDARG未设置。然后我grep进入/usr/include/wireshark/并发现这个变量被设置在 中config.h,所以我认为可能有必要将它包括在内,瞧,确实如此。

我还需要添加-lwiretap以满足与libwireshark.

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

于 2010-11-27T04:15:44.370 回答