__USE_BSD struct icmp 报dereferencing pointer to incomplete type错误

这个问题困扰了我2天,

网上下载了个ping 程序,我修改修改准备加到了我的程序里,这样ping外网的时候就不用调用system(ping),直接调用ping函数就可以实现,还有我看了看ping的实现过程,其实也不是很复杂,于是就开始调试了,

首先在gcc上调试,很顺利,一会就做了一个可以ping外网的命令来, 于是我把程序添加到我的imx6ull工程中,

arm-linux-gnueabihf-gcc -Wall -O2 -g -std=c99 -I /home/willow/linux/imx6ull/app/zhanfang/include -I /home/willow/linux/imx6ull/app/zhanfang/iniparser  -Wp,-MD,.pingslf.o.d -c -o pingslf.o pingslf.c

却发现编译错误,

__USE_BSD struct icmp 报dereferencing pointer to incomplete type错误

dereferencing pointer to incomplete type,其实这个错误也很常见,就是结构体定义不完整,

 struct icmp但是这个结构体肯定定义了呀,不然怎么单个编译就可以编译过去呀,

 

于是我走了很多弯路,最终发现是-std=c99 引起的,当我把这个关键字去掉之后就,编译就通过了。

arm-linux-gnueabihf-gcc -Wall -O2 -g  -I /home/willow/linux/imx6ull/app/zhanfang/include -I home/willow/linux/imx6ull/app/zhanfang/iniparser  -Wp,-MD,.pingslf.o.d -c -o pingslf.o pingslf.c

至今我也不明白为什么 把 -std=c99 和 __USE_BSD这两个有冲突?