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卻可能會成功,不信你試試.
  • 有些東西不支持多線程編譯,會報錯,如果多線編譯報錯.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM