-----Original Message-----
From: -= ArkanoiD =- <ark@mpak.convey.ru>
To: inet-admins@info.east.ru <inet-admins@info.east.ru>
Date: 28 января 1999 г. 16:19
Subject: Re: [inet-admins] CompiIing IPFilter 3.2.10 on Solaris 7 x86 with
gcc 2.8.1
>
>Гмм.. а чем продиктован столь своеобразный выбор платформы?
>
Историческими причинами.
-----Original Message-----
From: Dmitry E. Kiselyov <dima@gssmp.sci-nnov.ru>
To: inet-admins@info.east.ru <inet-admins@info.east.ru>
Date: 28 января 1999 г. 18:15
Subject: Re: [inet-admins] CompiIing IPFilter 3.2.10 on Solaris 7 x86 with
gcc 2.8.1
>
> А как ты поборол первый момент?
>Как-то раз я попадал примерно в такую же ситуацию. Дело было в том, что
>в исходнике вместо stdarg.h подключался varargs.h или даже оба сразу.
>Использование только stdarg.h решило проблему.
Дело в том, что там в ipt.h описано:
#include <fcntl.h>
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
Конфликтовать в этом месте они не могут.
Собственно одна из причин пряталась в файле:
/usr/include/promif.h
в строчке #include <sys/varargs.h>
Заменено на
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
/*
в этом месте я не уверен. Может быть надо использовать
системный include - <sys/varargs.h>
*/
#endif
После этого компиляция благополучно дошла до точки
gcc -g -I../.. -DSOLARIS2=7 -c ../../ip_state.c -o ip_state_u.o
In file included from /usr/include/sys/devops.h:20,
from /usr/include/sys/ddi_impldefs.h:15,
from /usr/include/sys/promif.h:16,
from /usr/include/inet/ip.h:797,
from ../../netinet/ip_compat.h:90,
from ../../ip_state.c:69:
/usr/include/sys/ddimapreq.h:60: parse error before `ddi_acc_hdl_t'
/usr/include/sys/ddimapreq.h:60: warning: no semicolon at end of struct or
union
/usr/include/sys/ddimapreq.h:62: parse error before `}'
/usr/include/sys/ddimapreq.h:62: warning: data definition has no type or
storage
class
In file included from /usr/include/sys/ddi_impldefs.h:15,
from /usr/include/sys/promif.h:16,
from /usr/include/inet/ip.h:797,
from ../../netinet/ip_compat.h:90,
from ../../ip_state.c:69:
/usr/include/sys/devops.h:148: parse error before `ddi_map_req_t'
/usr/include/sys/devops.h:202: parse error before `ddi_eventcookie_t'
/usr/include/sys/devops.h:205: parse error before `ddi_eventcookie_t'
/usr/include/sys/devops.h:207: parse error before `ddi_eventcookie_t'
/usr/include/sys/devops.h:208: `bus_add_eventcall' declared as function
returnin
g a function
/usr/include/sys/devops.h:208: warning: no semicolon at end of struct or
union
/usr/include/sys/devops.h:210: parse error before `ddi_eventcookie_t'
/usr/include/sys/devops.h:212: parse error before `ddi_eventcookie_t'
/usr/include/sys/devops.h:248: parse error before `ddi_map_req_t'
*** Error code 1
make: Fatal error: Command failed for target `ip_state_u.o'
Попытка откомпилировать с gcc -U__STDC__ приводит к следующему:
gcc -U__STDC__ -DNEED_INET_ATON -g -I../.. -DSOLARIS2=7 -c
../../inet_addr.c -o
inet_addr.o
*undef*:1: warning: undefining `__STDC__'
../../inet_addr.c:188: conflicting types for `inet_addr'
/usr/include/arpa/inet.h:62: previous declaration of `inet_addr'
*** Error code 1
В куске кода inet_addr.c явно рассчитывают на STDC и никаких проверок
не делают :-( (функция описана в inet.h, но с
#ifdef __STDC__
...
extern in_addr_t inet_addr(const char *);
...
#else
unsigned long inet_addr();
...
#endif
Если исправить здесь, то после этого возникает ошибка в
gcc -U__STDC__ -g -I../.. -DSOLARIS2=7 -c ../../ipt.c -o ipt.o
*undef*:1: warning: undefining `__STDC__'
../../ipt.c: In function `main':
../../ipt.c:163: `ipl' undeclared (first use in this function)
../../ipt.c:163: (Each undeclared identifier is reported only once
../../ipt.c:163: for each function it appears in.)
../../ipt.c:163: parse error before `ioctl'
*** Error code 1
>Dmitry E. Kiselyov
>Nizhny Novgorod City Health Emergency Station
>E-mail: dima@gssmp.sci-nnov.ru ICQ: 2010591
Так что по прежнему ищу помощь (готов выдать shell-account
профессионалам для личного просмотра).
В общем-то совершенно ясно, что -U__STDC__ - это через пятую точку,
но _почему_ возникает parse error в совершенно (на мой,
непрофессиональный, взгляд) корректном описании -
typedef struct {
ddi_map_op_t map_op;
ddi_map_type_t map_type;
ddi_map_obj_t map_obj;
int map_flags;
int map_prot;
ddi_acc_hdl_t *map_handlep; /* это строка 60 */
int map_vers;
} ddi_map_req_t;
остается большой загадкой.
С уважением,
==============================
Sergey Mokryshev <mokr@child.ru>
Moscow Children Computer Club
Network Administrator
http://www.child.ru/
==============================
=============================================================================
"inet-admins" Internet access mailing list. Maintained by East Connection ISP.
Mail "unsubscribe inet-admins" to Majordomo@info.east.ru if you want to quit.
Archive is accessible on http://info.east.ru/rus/inetadm.html