struct ip_mreq 未定义问题解决
场景
编译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 <netinet/in.h>,无效
问题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” 作为符号声明的一部分,为了简化,从而定义了上面的两个宏方面我们使用
2)内核源码查找结构体或者宏定义
[root@localhost onvif-server-discover]# find / -name "*.h" | xargs grep "struct ip_mreq" -rn
/usr/include/linux/in.h:166:struct ip_mreq {
/usr/include/linux/in.h:171:struct ip_mreqn {
/usr/include/linux/in.h:177:struct ip_mreq_source {
/usr/include/netinet/in.h:265:struct ip_mreq
/usr/include/netinet/in.h:274:struct ip_mreq_source
/usr/include/bits/in.h:152:/* Like `struct ip_mreq' but including interface specification by index. */
/usr/include/bits/in.h:153:struct ip_mreqn
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/linux/igmp.h:62: struct ip_mreqn multi;
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/linux/igmp.h:113:extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr);
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/linux/igmp.h:114:extern int ip_mc_join_group_ssm(struct sock *sk, struct ip_mreqn *imr,
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/linux/igmp.h:116:extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr);
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/linux/igmp.h:119: struct ip_mreq_source *mreqs, int ifindex);
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/uapi/linux/in.h:166:struct ip_mreq {
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/uapi/linux/in.h:171:struct ip_mreqn {
/usr/src/kernels/3.10.0-1062.el7.x86_64/include/uapi/linux/in.h:177:struct ip_mreq_source {
- 关于更改ip后dbconsole服务不能启动(em不能使用)问题的根本解决方法(ZZ)
- 解决MSSQL 2008不能用IP登录的问题
- System eth2 找不到 , 配置centos 静态IP 暂未解决问题
- 解决使用飞秋出现显示同IP好友的问题
- 解决同一个ip下 不同端口,session共享的问题
- 解决visualsvn监听ip 错误的问题
- 网卡序号漂移的解决办法(复制虚拟机IP问题)
- win10如何开热点,并解决手机无法分配ip问题
- 解决局域网内盗用IP的安全问题
- 网络连接不能获取IP问题解决
- mmJ:Linux强制更新Ip地址,解决Ip冲突无法访问问题
- Socket不能选择本地IP连接问题如何解决
- 解决layui调用自定义方法提示未定义的问题
- MySQL 可以用localhost 连接,但不能用IP连接的问题解决方法
- 解决MSSQL 2008不能用IP登录的问题 和 打开可以用SA登录SQL2008的方法
- 【Linux】解决Oracle VirtualBox安装CentOS而无法正常获取IP的问题
- 采集爬虫中,解决网站限制IP的问题? - wendi_0506的专栏 - 博客频道 - CSDN.NET
- SQL Server的IP不能连接问题解决
- 解决Mysql只能用localhost而不能用ip进行访问的问题