解壓,進入,使用默認配置文件
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卻可能會成功,不信你試試.
- 有些東西不支持多線程編譯,會報錯,如果多線編譯報錯.
