代码之家  ›  专栏  ›  技术社区  ›  Aidan Steele

编译libwireshark

  •  0
  • Aidan Steele  · 技术社区  · 14 年前

    我试图编译一个程序 libwireshark 在Ubuntu10.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’
    

    我应该做些什么来纠正这些问题?

    1 回复  |  直到 14 年前
        1
  •  2
  •   John Zwinck    14 年前

    这似乎是一个简单的例子,用户不友好的包装和代码组织。首先需要包含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通用 安装了,或者 /usr/lib/libwireshark.so 它的参照物存在。