做了近10年的软硬件开发,从今天起,我将分享自己项目实践中遇到的一些问题的解决方法和代码,向开源致敬!
项目中要用wireless.h , 获取WIFI的 link Quality 、level; 项目中已经包含了net/if 接口,而wireless.h 又包含了 linux/if 接口,net/if 接口和linux/if 接口会有重定义的冲突,虽然建议用net,但是迫于无奈需要共存,编译的时候遇到了下面的错误,更换 <linux/if.h> 和 net/if.h 的位置并不能解决, google 也没有搜索到解决办法。 无奈自己分析下到底为何会冲突。
错误如下:
Building file: ../src/protocol_dec.cpp
Invoking: Cross G++ Compilerarm-hisiv300-linux-g++ -w -I"../src" -I"../third_lib/include" -I"../hi_sdk/include" -I"../faac/include" -I"../aac_enc/include" -I"../aac_enc/include/fdk-aac" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/protocol_dec.d" -MT"src/protocol_dec.d" -o "src/protocol_dec.o" "../src/protocol_dec.cpp"
In file included from /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/wireless.h:74:0,
from ../src/protocol_dec.h:103,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/if.h:140:8: error: redefinition of ‘struct ifmap’
struct ifmap {
^
In file included from ../src/protocol_dec.h:92:0,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/net/if.h:112:8: error: previous definition of ‘struct ifmap’
struct ifmap
^
In file included from /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/wireless.h:74:0,
from ../src/protocol_dec.h:103,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/if.h:174:8: error: redefinition of ‘struct ifreq’
struct ifreq {
^
In file included from ../src/protocol_dec.h:92:0,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/net/if.h:127:8: error: previous definition of ‘struct ifreq’
struct ifreq
^
In file included from /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/wireless.h:74:0,
from ../src/protocol_dec.h:103,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/linux/if.h:223:8: error: redefinition of ‘struct ifconf’
struct ifconf {
^
In file included from ../src/protocol_dec.h:92:0,
from ../src/protocol_dec.cpp:10:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/usr/include/net/if.h:177:8: error: previous definition of ‘struct ifconf’
struct ifconf
^
src/subdir.mk:30: recipe for target 'src/protocol_dec.o' failed
==================
重定义,很明显吗。
解决办法:
拷贝wireless.h 到自己工程目录下,改个名字**.h, 项目include的时候include "**.h"自己重命名的文件,不要include系统的wireless.h。
更改上面的.h 文件,删掉里面的三个include头文件
#include <linux/types.h> /* for __u* and __s* typedefs */
#include <linux/socket.h> /* for "struct sockaddr" et al*/
#include <linux/if.h> /* for IFNAMSIZ and co... */
编译通过正常。
获取wifi的 link Quality正常, 花了几个小时解决。