Gcc 针对libwireshark编译

Gcc 针对libwireshark编译,gcc,glib,wireshark,gcc-warning,Gcc,Glib,Wireshark,Gcc Warning,我正试图在Ubuntu 10.10上编译一个针对libwireshark的程序。我已经安装了wireshark-dev软件包,其中安装了/usr/lib/wireshark和/usr/include/wireshark中的文件 我的C源代码文件的头部包含一个#include指令,我的gcc命令行参数如下: $ gcc -I/usr/include/wireshark `pkg-config --libs --cflags glib-2.0` -Wall -o test.out test.c -L

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

我的C源代码文件的头部包含一个
#include
指令,我的
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’
/usr/lib/gcc/i686 linux gnu/4.4.5/include/varargs.h:4:error:#error“gcc不再实现”
/usr/include/wireshark/epan/ftypes/ftypes.h:258:错误:应为“=”、“、”、“;”、”“union”之前的asm“或”属性

如何纠正这些问题?

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

#include <wireshark/config.h> /* needed by epan */
#include <epan/epan.h>
#包括epan需要的/**/
#包括
确保在包含此库中的标题时首先执行此操作

我怎么知道的?我深入研究了
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
及其引用存在。

先生,您是冠军!非常感谢你。所有正确的文件似乎都在适当的位置(可能来自以前的尝试),但最好将其保留在后面。