__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
却发现编译错误,
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这两个有冲突?