Kompilieren gegen libwireshark
-
28-09-2019 - |
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?
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.