linux struct ip_mreq_source,struct ip_mreq 未定义问题解决

在编译Onvif模块时遇到struct ip_mreq_source和struct ip_mreq未定义的问题。通过在源文件中直接添加结构体定义尝试解决,但引入相关头文件和Makefile宏定义-D __USE_GNU均无效。查阅内核源码发现这些结构体定义位于/usr/include/linux/in.h和/usr/include/netinet/in.h等头文件中。
摘要由CSDN通过智能技术生成

场景

编译Onvif发现模块,出现如下组播的地址结构体没有定义的问题

onvif_server.c:54:20: 错误:‘mcast’的存储大小未知

struct ip_mreq mcast;

^

make: *** [onvif_server.o] 错误 1

解决

在onvif_server.c文件头文件下面添加如下定义

struct ip_mreq

{

struct in_addr imr_multiaddr;//主机即将加入监听的组播地址

struct in_addr imr_interface;//指定客户端主机加入组播使用哪张网卡的IP地址

};

问题1)引入头文件#include ,无效

问题2)Makefile文件指定宏定义-D __USE_GNU, 无效

知识点

1)__BEGIN_DECLS 和__END_DECLS

sys/cdefs.h

#if defined(__cplusplus)

#define __BEGIN_DECLS   extern "C" {

#define __END_DECLS     }

#else

#define __BEGIN_DECLS

#define __END_DECLS

说明编写代码,经常需要c和c++混合使用,为了使 C 代码和 C++ 代码保持互相兼容的过程调用接口,

需要在 C++ 代码里加上 extern “C” 作为符号声明的一部分,为了简化,从而定义了上面的两个宏方面我们

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值