为Hi3518ev200交叉编译wpa_supplicant v2.10遇链接错误求助
交叉编译wpa_supplicant v2.10 for Hi3518ev200时的dbus链接错误解决建议
问题背景
尝试为Hi3518ev200交叉编译最新版wpa_supplicant v2.10,已完成openssl和libnl的编译,但编译wpa_supplicant时出现链接错误:
CC ../src/drivers/driver_wext.c CC ../src/drivers/drivers.c CC ../src/l2_packet/l2_packet_linux.c /usr/lib/dbus-1.0/debug-build/lib/libdbus-1.so: file not recognized: File format not recognized collect2: error: ld returned 1 exit status make: *** [Makefile:1894: wpa_supplicant] Error 1
当前dbus-1的编译参数及库信息:
- pkg-config输出:
root@Debian12:/home/dev/yi-hack-v5/src/wpa/wpa_supplicant-2.10/wpa_supplicant# pkg-config --libs --cflags dbus-1 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/debug-build/lib/dbus-1.0/include -L/usr/lib/dbus-1.0/debug-build/lib -ldbus-1 - 库文件格式:
root@Debian12:/home/dev/yi-hack-v5/src/wpa/wpa_supplicant-2.10/wpa_supplicant# file /usr/lib/dbus-1.0/debug-build/lib/libdbus-1.so.3.32.4 /usr/lib/dbus-1.0/debug-build/lib/libdbus-1.so.3.32.4: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3afa1524c30e559f584583e19c3b73788d28354a, stripped - 软链接列表:
root@Debian12:/home/dev/yi-hack-v5/src/wpa/wpa_supplicant-2.10/wpa_supplicant# ls -l /usr/lib/dbus-1.0/debug-build/lib/ total 1872 drwxr-xr-x 3 root root 4096 Nov 15 07:43 cmake drwxr-xr-x 3 root root 4096 Nov 15 07:43 dbus-1.0 -rw-r--r-- 1 root root 1310198 Sep 16 11:03 libdbus-1.a lrwxrwxrwx 1 root root 19 Sep 16 11:03 libdbus-1.so -> libdbus-1.so.3.32.4 lrwxrwxrwx 1 root root 19 Sep 16 11:03 libdbus-1.so.3 -> libdbus-1.so.3.32.4 -rw-r--r-- 1 root root 593656 Sep 16 11:03 libdbus-1.so.3.32.4 drwxr-xr-x 2 root root 4096 Nov 15 07:43 pkgconfig
已尝试Debian 9编译,结果类似;考虑使用wifi_tools_static项目,但该项目主要适配Android,需自行调整。
核心原因
当前系统使用的dbus库是x86-64架构的,而Hi3518ev200是ARM架构,交叉编译时必须使用对应目标架构的库,主机系统的库无法被ARM交叉编译器识别。
解决建议
1. 交叉编译适配ARM架构的dbus库
- 下载与wpa_supplicant v2.10兼容的dbus源码(推荐v1.14.x系列)
- 配置交叉编译环境,指定Hi3518ev200对应的交叉编译器(如
arm-hisiv300-linux-gcc),并设置安装路径到自定义交叉编译库目录:./configure --host=arm-hisiv300-linux \ --prefix=/path/to/your/cross-libs \ --disable-debug \ --disable-xml-docs \ --disable-doxygen-docs \ --without-x - 执行编译安装:
make && make install
2. 配置wpa_supplicant使用交叉编译的dbus库
- 导出交叉编译库的pkgconfig路径,确保pkg-config能找到ARM版本的dbus配置:
export PKG_CONFIG_PATH=/path/to/your/cross-libs/lib/pkgconfig - 进入wpa_supplicant目录,清理之前的编译文件:
make clean - 重新生成配置文件(如使用基础wifi配置):
make defconfig-wifi,确保CONFIG_DBUS=y(如果需要dbus功能) - 执行编译:
make
3. 可选:禁用dbus支持
如果你的场景不需要dbus功能,可以直接修改wpa_supplicant的defconfig文件,注释掉CONFIG_DBUS=y这一行,重新编译即可跳过dbus库的链接。
4. 调整wifi_tools_static项目适配Hi3518ev200
- 修改项目Makefile中的交叉编译器为Hi3518ev200的ARM编译器
- 替换依赖库路径为你已交叉编译好的openssl、libnl(及dbus,若需要)的路径
- 移除Android专属的编译选项(如Android系统头文件、链接选项),适配Hi3518ev200的内核版本和根文件系统环境
内容的提问来源于stack exchange,提问作者alienatedsec
相关产品推荐
相关产品推荐

