1

libwiresharkUbuntu 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条件付きで含まれていることがわかりました。次に、'd inして、この変数がに設定されていることを確認したので、それを含める必要があるかもしれないと考えました。varargs.hHAVE_STDARGgrep/usr/include/wireshark/config.h

-lwiretapまた、とのリンクを満たすために追加する必要がありましたlibwireshark

の編成におけるもう1つの問題は、前者がシンボリックリンクする実際の情報を後者が提供している場合でも、wireshark-dev(パッケージレベルで)に依存しないことです。したがって、それがインストールされていること、またはそれとその指示対象が存在することを確認する必要があります。wireshark-commonlibwireshark.sowireshark-common/usr/lib/libwireshark.so

于 2010-11-27T04:15:44.370 に答える