2010-11-27 38 views
0

J'essaye de compiler un programme contre libwireshark sur Ubuntu 10.10. J'ai installé le package wireshark-dev, qui a installé les fichiers dans /usr/lib/wireshark et /usr/include/wireshark.Compilation contre libwireshark

La tête de mon fichier C code source contient une directive #include <epan/epan.h> et mes gcc arguments de ligne de commande sont les suivantes:

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

Cependant, cela renvoie beaucoup d'erreurs, y compris:

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

Qu'est-ce que devrais-je faire pour rectifier ces problèmes?

Répondre

2

Cela semble être un cas simple d'empaquetage et d'organisation de code hostile à l'utilisateur. Vous devez d'abord inclure l'en-tête "config" pour Wireshark. Je l'écrirais de cette façon:

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

Assurez-vous de le faire en premier lorsque vous incluez les en-têtes de cette bibliothèque.

Comment le savais-je? J'ai creusé dans epan/proto.h et a constaté qu'il inclut conditionnellement varargs.h seulement si HAVE_STDARG n'est pas défini. J'ai ensuite grep 'd dans /usr/include/wireshark/ et a trouvé cette variable est définie dans config.h, donc j'ai pensé qu'il pourrait être nécessaire de l'inclure, et lo, il l'était. J'ai également besoin d'ajouter -lwiretap pour satisfaire la liaison avec libwireshark.

Une autre petite bête dans l'organisation de wireshark-dev est qu'elle ne dépend pas (au niveau du paquet) sur wireshark-common, même si ce dernier ne fournit la libwireshark.so réelle que les anciens liens symboliques à. Donc, vous devez vous assurer que wireshark-common est installé, ou que /usr/lib/libwireshark.so et son référent existent.

+0

Vous, monsieur, êtes un champion! Merci beaucoup. Tous les fichiers corrects semblent être en place (peut-être des tentatives précédentes), mais il est bon de laisser cela pour la postériorité. –