场景
编译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” 作为符号声明的一部分,为了简化,从而定义了上面的两个宏方面我们