Я давно нашел libipfix, сборщик IPFIX, написанный на C. Первоначальные авторы исчезли, но код все еще доступен на github. Я предполагаю, что если это там, это сработало для других людей.
Когда я пытаюсь запустить Makefile для определенной подпрограммы (example_collector_db), я получаю сообщение "ожидаемое выражение до ..." от GCC, которое не имеет большого смысла для меня. Вот Makefile, хотя и сильно сокращенный:
CC = gcc
CCOPT = -Wall -g
INCLS = -I. -I.. -I../lib -I../libmisc
DEFS = -DHAVE_CONFIG_H
CFLAGS = $(CCOPT) $(INCLS) $(DEFS)
CPPFLAGS =
LDFLAGS =
LIBS = -L../lib -L../libmisc -lipfix -lmisc
example_collector_db: example_collector_db.o Makefile
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ example_collector_db.o $(LDFLAGS) $(LIBS)
Но вот что происходит, когда я запускаю make:
root@myLinux:/home/me/libipfix_110209/examples# make example_collector_db
gcc -Wall -g -I. -I.. -I../lib -I../libmisc -DHAVE_CONFIG_H -c example_collector_db.c
In file included from ../libmisc/misc.h:39:0,
from example_collector_db.c:54:
../libmisc/hashtable.h:6:1: error: expected expression before 'struct'
struct hashtable;
^
Makefile:72: recipe for target 'example_collector_db.o' failed
make: *** [example_collector_db.o] Error 1
root@myLinux:/home/me/libipfix_110209/examples#
Хм. Похоже, что код пытается использовать заголовочный файл hashtable.h. Когда я смотрю, я вижу это:
1 /* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
2
3 #ifndef __HASHTABLE_CWC22_H__
4 #define __HASHTABLE_CWC22_H__
5
6 struct hashtable;
7
X ...more code here...
X
166 #endif /* __HASHTABLE_CWC22_H__ */
Таким образом, GCC, похоже, жалуется на строку 6, которую я считаю прототипом (?) Или подписью (?) Допустимой структуры где-то еще в коде. Но я не могу не задаться вопросом, действительно ли GCC жалуется на строку 4 ... разве это утверждение #define не должно иметь другого токена, например:
4 #define __HASHTABLE_CWC22_H__ 12345 // or something...?
На первый взгляд, у меня возникает соблазн предположить, что проблема заключается в строке 4, и этот код не может работать, пока не добавлен третий токен. Но кодер, который написал это, намного более продвинут, чем я. И как этот проект мог жить на github в течение почти пятнадцати лет, если в коде была такая простая ошибка?
Простите за характер "проверки здравомыслия" этого поста ... Я надеюсь, что здесь есть что-то более продвинутое, что пропускает мой опыт среднего уровня ...
Спасибо!