做了近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++ Compiler
arm-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正常,  花了几个小时解决。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐