編譯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
尊重原創,轉載請說明出處