как решать ошибки типа "struct iphdr" не имеет члена с именем "daddr" - PullRequest
1 голос
/ 09 января 2010

Я запустил программу (ссылка - http://www.security -freak.net / raw-sockets / sniffer_eth_ip_tcp.c ) в ядре Fedora 5. При компиляции я получаю следующие ошибки:

[root@localhost ~]# gcc sniffer_eth_ip_tcp.c
    In file included from sniffer_eth_ip_tcp.c:12: /usr/include/linux/ip.h:97: error: expected specifier-qualifier-list before ‘uint8_t’
    In file included from /usr/include/linux/tcp.h:21,
                 from sniffer_eth_ip_tcp.c:13:
    /usr/include/asm/byteorder.h:6:2: warning: #warning using private kernel header; include   <endian.h> instead!
    sniffer_eth_ip_tcp.c: In function ‘ParseIpHeader’:
    sniffer_eth_ip_tcp.c:147: error: ‘struct iphdr’ has no member named ‘daddr’
    sniffer_eth_ip_tcp.c:148: error: ‘struct iphdr’ has no member named ‘saddr’
    sniffer_eth_ip_tcp.c: In function ‘ParseTcpHeader’:
    sniffer_eth_ip_tcp.c:185: error: ‘struct iphdr’ has no member named ‘protocol’
    sniffer_eth_ip_tcp.c:187: error: ‘struct iphdr’ has no member named ‘ihl’

Но struct iphdr в соответствующем заголовочном файле содержит вышеупомянутые элементы данных. может кто-нибудь, пожалуйста, помогите ..

1 Ответ

3 голосов
/ 09 января 2010

Единственный способ получить эту ошибку, если iphdr, на который ссылается ваша программа, не включает эти элементы данных. Итак, ищите все ваши включения, проверяйте наличие дубликатов и т. Д. (Также вы можете запустить исходный код с помощью прекомпиляции и выяснить ВСЕ, что было включено, что обычно дает ваш ответ)

[править]
запустите cpp на вашем источнике, чтобы узнать, какие заголовочные файлы включены (в каком порядке). Если у вас есть заголовок с неверной информацией перед правильной информацией, у вас будут проблемы. По сути, включают только заголовочные файлы, необходимые для компиляции программы
[/ Править]

...