wpa_supplicant的移植

解压,进入,使用默认配置文件

cd wpa_supplicant-2.6  
cp defconfig .config  

修改.config文件,修改部分,根据自己的需要进行这部分的配置

#指定libnl的路径和CC
CC=/usr/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc -L/root/openssl-1.1.1d/__install/lib
CFLAGS += -I/root/openssl-1.1.1d/__install/include  
LIBS += -L/root/openssl-1.1.1d/__install/lib  

CONFIG_DRIVER_NL80211=y  

CONFIG_LIBNL32=y  
#指定libnl的路径
CFLAGS += -I/root/libnl-3.5.0/__install/include  
LIBS += -L/root/libnl-3.5.0/__install/lib 

编译make
将生成的文件拷贝到开发吧的bin目录下

编译错误总结

  • 在定义CFLAGS或者LDFLAGS的时候,尽量不要指定PC系统的目录,像/usr/lib,/usr/include之类。因为系统一般都是x86的库,如果被交叉编译的库链接的话会报错。
cc1: warning: include location "/usr/local/include/libnl3" is unsafe for cross-compilation [-Wpoison-system-directories]
cc1: warning: include location "/usr/include/dbus-1.0" is unsafe for cross-compilation [-Wpoison-system-directories]
  CC  ../src/drivers/netlink.c
  • -ldbus-1指的是 libdbus.so,也就是说该错误是由于找不到libdbus.so库文件引起的.一般可以检查该库是否安装,以及所在目录的库文件名称与编译器需要的库文件名称是否一致,如果库文件存在,并且名称有差异,比如libdbus.so.20文件,而编译器需要的是libdbus.so.30,那么可以尝试使用ln -s libdbus.so.20 libdbus.so.30建议软链接,尝试解决.
/usr/arm/arm-2014.05/bin/../lib/gcc/arm-none-linux-gnueabi/4.8.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -ldbus-1
collect2: error: ld returned 1 exit status
Makefile:1903: recipe for target 'wpa_supplicant' failed
make: *** [wpa_supplicant] Error 1

显然,找不到头文件造成的错误,有多种解决方法

  • 通过make -I/头文件路径,指定头文件搜索路径(可在Makefile中添加,一般通过CFLAGS+=头文件路径的形式来指定,或者在make后面直接使用).
  • 使用gcc --print-search-dirs可以查看头文件的搜索路径,这里的gcc需要根据你的gcc编译器名称调整,通过ln -s头文件头文件搜索位置建立`通过在头文件的搜索位置,建立一个同名软链接,来帮助编译器找到头文件
  • 通过PKG_CONFIG_PATH环境变量,指定文件搜索路径.
  • 通过修改源代码文件,如通过错误信息找到../src/drivers/driver_nl80211.c,将#include的路径修改成它可以找到的地方(不推荐).
../src/drivers/driver_nl80211.c:17:31: fatal error: netlink/genl/genl.h: No such file or directory
 #include <netlink/genl/genl.h>
                               ^
compilation terminated.
Makefile:1991: recipe for target '../src/drivers/driver_nl80211.o' failed
make: *** [../src/drivers/driver_nl80211.o] Error 1
  • make不成功 Make clean一下 在make有可能会成功.
  • 多线程make不成功,单线make却可能会成功,不信你试试.
  • 有些东西不支持多线程编译,会报错,如果多线编译报错.

posted on 2019-12-08 16:25  freedo  阅读(1149)  评论(0编辑  收藏  举报

导航