我正在尝试在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’
我该怎么做才能纠正这些问题?
答案 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
及其指示对象存在。