как устранить такие ошибки, как «struct iphdr» не имеет члена с именем «daddr»
-
19-09-2019 - |
Вопрос
Я запустил программу (ссылка - http://www.security-freak.net/raw-sockets/sniffer_eth_ip_tcp.c ) в моем ядре Fedora Core 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’
Но структура iphdr в соответствующем заголовочном файле содержит вышеупомянутые элементы данных.может кто-нибудь, пожалуйста, помогите..
Решение
Единственный способ получить эту ошибку — если iphdr, на который ссылается ваша программа, не включает эти элементы данных.Итак, просмотрите все свои включения, проверьте наличие дубликатов и т. д.(также вы можете запустить исходный код через прекомпиляцию и узнать ВСЕ, что было включено, что обычно дает ваш ответ)
[редактировать]
запустите cpp в исходном коде, чтобы узнать, какие файлы заголовков включены (в каком порядке).Если у вас есть заголовок с неправильной информацией, включенной перед правильной информацией, у вас возникнет проблема.По сути, включайте только заголовочные файлы, необходимые для компиляции программы.
[/редактировать]