使用cargo lambda构建Rust Lambda时找不到OpenSSL开发头文件
解决cargo-lambda构建含reqwest的Rust Lambda时OpenSSL头文件找不到的问题
方案一:改用reqwest的rustls后端(推荐)
reqwest默认依赖系统OpenSSL,换成rustls后端可以完全绕开系统OpenSSL的交叉编译问题,操作步骤如下:
- 修改
Cargo.toml中的reqwest依赖,指定启用rustls特性:reqwest = { version = "0.11", features = ["rustls-tls", "json"] } - 重新执行构建命令:
cargo lambda build --release --arm64
方案二:交叉编译arm64版本的OpenSSL
如果必须依赖系统OpenSSL,需要为arm64目标架构编译对应的库文件:
- 安装arm64交叉编译工具链:
pacman -S aarch64-linux-gnu-gcc aarch64-linux-gnu-binutils - 下载与
openssl-sys-0.9.87兼容的OpenSSL源码(推荐1.1.1系列),解压后进入源码目录,执行交叉编译配置:./Configure linux-aarch64 --prefix=/usr/aarch64-linux-gnu shared make sudo make install - 构建时指定交叉编译相关环境变量,确保cargo lambda能找到arm64版本的OpenSSL:
CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc \ OPENSSL_LIB_DIR=/usr/aarch64-linux-gnu/lib \ OPENSSL_INCLUDE_DIR=/usr/aarch64-linux-gnu/include \ OPENSSL_DIR=/usr/aarch64-linux-gnu \ cargo lambda build --release --arm64
额外排查点
- 确认
openssl-sys版本与系统安装的OpenSSL版本兼容:openssl-sys-0.9.87对应OpenSSL 1.1.x系列,若系统装的是3.x版本会出现兼容性问题,可在Cargo.toml中强制指定openssl-sys版本,或降级系统OpenSSL到1.1.x。 - 检查环境变量是否在cargo lambda执行的上下文里生效:确保变量设置后在同一终端执行构建命令,避免环境变量传递失效。
内容的提问来源于stack exchange,提问作者J Stach
相关产品推荐
相关产品推荐

