gpt4 book ai didi

android - 'sizeof' 对不完整类型 'struct ether_arp' 的无效应用

转载 作者:行者123 更新时间:2023-11-30 04:19:47 26 4
gpt4 key购买 nike

我正在尝试使用 android-ndk 从 open-mesh.org 编译 batctl-2012.0.0,但是,在进行中,tcpdump.c 将“sizeof”的无效应用程序提供给不完整类型“struct ether_arp”。请告诉我在哪里或如何解决它。非常感谢

static void dump_arp(unsigned char *packet_buff, ssize_t buff_len, int time_printed)
{
struct ether_arp *arphdr;

LEN_CHECK((size_t)buff_len, (long)sizeof(struct ether_arp), "ARP");

if (!time_printed)
print_time();

arphdr = (struct ether_arp *)packet_buff;

switch (ntohs(arphdr->arp_op)) {
case ARPOP_REQUEST:
printf("ARP, Request who-has %s", inet_ntoa(*(struct in_addr *)&arphdr->arp_tpa));
printf(" tell %s (%s), length %zd\n", inet_ntoa(*(struct in_addr *)&arphdr->arp_spa),
ether_ntoa_long((struct ether_addr *)&arphdr->arp_sha), buff_len);
break;
case ARPOP_REPLY:
printf("ARP, Reply %s is-at %s, length %zd\n", inet_ntoa(*(struct in_addr *)&arphdr->arp_spa),
ether_ntoa_long((struct ether_addr *)&arphdr->arp_sha), buff_len);
break;
default:
printf("ARP, unknown op code: %i\n", ntohs(arphdr->arp_op));
break;
}
}

这在终端

/home/renanto/workspace/androidbatctl/jni/tcpdump.c: In function 'dump_arp':
/home/renanto/workspace/androidbatctl/jni/tcpdump.c:96: error: invalid application of 'sizeof' to incomplete type 'struct ether_arp'
/home/renanto/workspace/androidbatctl/jni/tcpdump.c:96: error: invalid application of 'sizeof' to incomplete type 'struct ether_arp'

最佳答案

“不完整类型”意味着编译器看不到结构的定义。您不能使用 sizeof 或访问不完整类型的任何字段。

要使这个功能起作用,您需要#include 头文件,该头文件具有struct ether_arp 的定义。由于它是一个 Linux 结构,而不是特定于 Android 的结构,您应该可以在 NDK 的包含路径中找到它。

#include <netinet/if_ether.h>

关于android - 'sizeof' 对不完整类型 'struct ether_arp' 的无效应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9451150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com