编译wpa_supplicant时经常会遇到一些链接问题,导致编译失败,下面介绍一种方法,可以直接make出wpa工具。
wpa_supplicant编译依赖openssl的库,而openssl又依赖libnl的库,为方便编译,将wpa_supplicant、openssl、libnl源码放到同一级目录下,编写makefile,依次编译libnl、openssl,最终编译wpa_supplicant。
准备工作:
wpa_supplicant、openssl、libnl的源码:
wpa_suppliant: http://hostap.epitest.fi/releases/wpa_supplicant-2.6.tar.gz
openssl:https://www.openssl.org/source/old/1.0.1/openssl-1.0.1s.tar.gz
libnl:https://www.infradead.org/~tgr/libnl/files/libnl-1.1.4.tar.gz
交叉编译器:选择自己用的交叉编译器,我用的是arm-none-linux-gnueabi-
重点来了:Makefile
MAKE := make -w
PWD := $(shell pwd)
PATH := 你的jdk环境
PATH := $(PATH):$(PWD)/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin // 交叉编译器路径
CROSS_COMPILE := //暂时清空.bashrc中指定的环境变量,避免冲突
SYSROOT := $(PWD)/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/default
LIBNL_DIR = $(PWD)/libnl-1.1.4
OPENSSL_DIR = $(PWD)/openssl-1.0.1s
WPA_SUPPLICANT_DIR = $(PWD)/wpa_supplicant-2.6/wpa_supplicant
all:wpa_supplicant
wpa_supplicant:openssl libnl
cp -rf $(WPA_SUPPLICANT_DIR)/defconfig $(WPA_SUPPLICANT_DIR)/.config
$(MAKE) -C $(WPA_SUPPLICANT_DIR) CC=arm-none-linux-gnueabi-gcc
cp -rf $(WPA_SUPPLICANT_DIR)/wpa_cli $(WPA_SUPPLICANT_DIR)/wpa_supplicant $(PWD)
openssl:
if [ ! -f $(OPENSSL_DIR)/config.log ];then cd $(OPENSSL_DIR) && ./config no-asm --prefix=$(SYSROOT)/usr os/compiler:arm-none-linux-gnueabi-gcc;fi
$(MAKE) -C $(OPENSSL_DIR)
arm-none-linux-gnueabi-gcc -shared -o libcrypto.so $(OPENSSL_DIR)/libcrypto.a
arm-none-linux-gnueabi-gcc -shared -o libssl.so $(OPENSSL_DIR)/libssl.a
$(MAKE) -C $(OPENSSL_DIR) install DESTDIR=$(SYSROOT)
cp -rf libcrypto.so libssl.so $(SYSROOT)/usr/lib
libnl:
if [ ! -f $(LIBNL_DIR)/config.log ];then cd $(LIBNL_DIR) && ./configure --prefix=/usr --host=arm-none-linux-gnueabi;fi
$(MAKE) -C $(LIBNL_DIR)
$(MAKE) -C $(LIBNL_DIR) install DESTDIR=$(SYSROOT)
clean:
rm -rf *.so *.so.* wpa_cli wpa_supplicant
尊重原创,转载请说明出处