Frage

Ich bin versucht, ein Programm gegen libwireshark auf Ubuntu 10.10 zu kompilieren. Ich habe das wireshark-dev Paket installiert, die Dateien in /usr/lib/wireshark und /usr/include/wireshark installiert hat.

Der Kopf meiner C-Quellcode-Datei enthält eine #include <epan/epan.h> Direktive und meine gcc Kommandozeilenargumente sind wie folgt:

$ gcc -I/usr/include/wireshark `pkg-config --libs --cflags glib-2.0` -Wall -o test.out test.c -L/usr/lib/wireshark -lwireshark

Doch diese Rückkehr viele Fehler, einschließlich:

/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’

Was kann ich tun, um diese Probleme zu beheben?

War es hilfreich?

Lösung

Es scheint einen einfachen Fall von benutzerunfreundlich Verpackung und Code-Organisation. Sie müssen zuerst die „config“ Header für Wireshark aufzunehmen. Ich würde es auf diese Weise schreiben:

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

Seien Sie sicher, dass Sie dies zuerst tun, wenn Sie Header aus dieser Bibliothek enthalten.

Wie wusste ich? Ich grub in epan/proto.h und fand, dass es umfasst bedingt varargs.h nur, wenn HAVE_STDARG nicht gesetzt ist. Ich habe dann in grep /usr/include/wireshark/'d und fand diese Variable in config.h gesetzt, so dass ich es dachte notwendig sein könnte, um es zu schließen, und siehe, es war.

Ich muß auch -lwiretap zufrieden zu stellen Verknüpfung mit libwireshark hinzuzufügen.

Ein weiterer nit in der Organisation von wireshark-dev ist, dass es nicht (auf Paketebene) hängt auf wireshark-common, obwohl letztere die tatsächliche libwireshark.so bietet, die die ehemaligen Symlinks. So sollten Sie sich vergewissern, dass wireshark-common installiert ist, oder dass /usr/lib/libwireshark.so und seine referent exist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top