【问题标题】:Compiling against libwireshark针对 libwireshark 进行编译
【发布时间】:2010-11-27 01:37:22
【问题描述】:

我正在尝试在 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’

我应该如何解决这些问题?

【问题讨论】:

    标签: gcc glib wireshark gcc-warning


    【解决方案1】:

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

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

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

    我怎么知道的?我深入研究了epan/proto.h,发现它有条件地包含varargs.h,只有在HAVE_STDARG 没有设置的情况下。然后我 grep'd 在 /usr/include/wireshark/ 中发现这个变量设置在 config.h 中,所以我认为可能有必要包含它,瞧,它是。

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

    wireshark-dev 组织中的另一个问题是它不依赖于(在包级别)wireshark-common,尽管后者确实提供了前者符号链接到的实际 libwireshark.so。所以你应该确保wireshark-common已经安装,或者/usr/lib/libwireshark.so和它的引用存在。

    【讨论】:

    • 您,先生,是冠军!非常感谢。所有正确的文件似乎都已就位(可能来自以前的尝试),但最好将其留在那里以备后用。
    猜你喜欢
    • 1970-01-01
    • 2014-07-24
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多