GitHub Action编译依赖OpenSSL的Rust项目失败求助
解决方案
问题核心
你遇到两个关键问题:
- macOS SDK版本不兼容:GitHub Actions的
macos-latest镜像未预装macosx11.1 SDK,导致xcrun命令报错 - 交叉编译OpenSSL失败:从x86_64交叉编译到aarch64时,系统OpenSSL无法适配目标架构,需启用vendored模式让openssl-sys自行编译适配版本
具体修改步骤
1. 更新编译脚本(ci/build-macos.sh)
修改SDK获取逻辑,并添加OPENSSL_VENDOR=1启用内置OpenSSL:
#!/bin/bash set -e echo "Building Test CLI" # 使用镜像默认的可用SDK,避免指定过时版本 SDKROOT=$(xcrun --show-sdk-path) MACOSX_DEPLOYMENT_TARGET=11.0 OPENSSL_VENDOR=1 cargo build --release --target=aarch64-apple-darwin echo "Packaging Binaries" cd target/aarch64-apple-darwin/release tar -zcvf "$1.tar.gz" test-cli
2. (可选)通过Cargo配置强制启用vendored模式
如果环境变量方式不生效,可在项目根目录创建.cargo/config.toml文件,添加以下内容:
[target.aarch64-apple-darwin] rustflags = ["--cfg", "openssl_vendored"]
3. 确认GitHub Action配置
当前Action配置无需额外修改,只需确保编译脚本的修改已提交到代码仓库即可。
修改说明
xcrun --show-sdk-path会自动获取镜像中可用的最新SDK路径,彻底解决指定过时SDK导致的找不到问题OPENSSL_VENDOR=1会让openssl-sys放弃查找系统OpenSSL,转而从源码编译适配aarch64架构的版本,完美解决交叉编译依赖问题
内容的提问来源于stack exchange,提问作者roloenusa
相关产品推荐
相关产品推荐

