Компиляция против libwireshark - PullRequest
0 голосов
/ 27 ноября 2010

Я пытаюсь скомпилировать программу с libwireshark в Ubuntu 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’

Что я должен сделать, чтобы исправить эти проблемы?

1 Ответ

2 голосов
/ 27 ноября 2010

Кажется, это простой случай недружественной пользователю упаковки и организации кода. Вы должны сначала включить заголовок "config" для Wireshark. Я бы написал так:

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

Убедитесь, что вы делаете это первым, когда включаете заголовки из этой библиотеки.

Как я узнал? Я копался в epan/proto.h и обнаружил, что он условно включает varargs.h, только если HAVE_STDARG не установлен. Затем я grep/usr/include/wireshark/ и обнаружил, что эта переменная установлена ​​в config.h, поэтому я подумал, что, возможно, необходимо включить ее, и вот, это было.

Мне также нужно было добавить -lwiretap, чтобы удовлетворить связь с libwireshark.

Еще один недостаток в организации wireshark-dev заключается в том, что он не зависит (на уровне пакета) от wireshark-common, хотя последний действительно обеспечивает libwireshark.so, на который ссылается первый символ. Поэтому вы должны убедиться, что wireshark-common установлен или что /usr/lib/libwireshark.so и его референт существуют.

...