Ubuntu下交叉编译ARM架构hostapd遇openssl/bn.h缺失错误求助
解决ARM交叉编译hostapd时找不到openssl/bn.h的问题
兄弟,这个坑我之前踩过无数次——你装的是x86架构的OpenSSL开发包,但交叉编译ARM程序时,编译器找的是ARM架构的头文件和库,根本不会去你本地/usr/include里的x86版本找东西!这就是为啥明明文件存在,还是报找不到的错。
下面给你几个靠谱的解决办法,按顺序试就行:
1. 给交叉编译环境安装ARM版OpenSSL开发库
这是最省心的方法,前提是你的Ubuntu支持multiarch(Ubuntu 18.04+基本都支持):
- 先添加ARM架构的包支持(以32位ARM为例,64位的话把
armhf换成arm64):sudo dpkg --add-architecture armhf - 更新软件源:
sudo apt update - 安装ARM版的OpenSSL开发包:
sudo apt install libssl-dev:armhf - 之后编译hostapd时,确保正确指定交叉编译器前缀(比如
arm-linux-gnueabihf-),编译器会自动去ARM架构的头文件目录查找。
2. 手动交叉编译ARM版OpenSSL(适用于源里没有对应版本的情况)
如果上面的方法不行,就自己编译一份ARM专属的OpenSSL:
- 下载OpenSSL稳定版源码(比如从官网下tar包)
- 配置交叉编译环境(替换成你的交叉编译器前缀):
export CC=arm-linux-gnueabihf-gcc ./Configure linux-armv4 --prefix=/opt/arm-openssl --openssldir=/opt/arm-openssl - 编译并安装:
make && sudo make install - 编译hostapd时,手动指定OpenSSL的路径:
- 要么在hostapd的
Makefile里添加:CFLAGS += -I/opt/arm-openssl/include LDFLAGS += -L/opt/arm-openssl/lib - 要么如果hostapd支持
configure,就用:./configure --with-openssl=/opt/arm-openssl CC=arm-linux-gnueabihf-gcc
- 要么在hostapd的
3. 检查hostapd的交叉编译配置是否正确
别漏了最基础的一步:编译hostapd时必须明确指定交叉编译工具链,比如:
make CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar LD=arm-linux-gnueabihf-ld
有些版本的hostapd需要在.config文件里配置OpenSSL路径,打开hostapd/.config看看有没有类似CFLAGS += -Ixxx的配置,没有的话手动加上ARM版OpenSSL的头文件路径。
内容的提问来源于stack exchange,提问作者Rafal
相关产品推荐
相关产品推荐

