Mac系统下Cargo构建报错ld framework not found Security如何解决
macOS下Rust chrono依赖Security框架链接失败解决方案
你遇到的报错是chrono 0.4.19版本默认启用了macOS平台的Security框架绑定,本地Xcode命令行工具路径配置异常导致链接时找不到对应系统框架,可按以下顺序排查修复:
- 首先修复Xcode命令行工具配置
先执行xcode-select --install安装基础命令行工具,如果提示已安装,执行sudo xcode-select --reset重置工具路径,大部分用户是升级macOS后SDK路径漂移导致的框架查找失败,重置后即可正常编译。 - 如果不需要chrono的加密相关特性,直接修改Cargo.toml依赖配置关闭默认特性即可:
可以根据自己的需求添加需要的特性,只要不启用chrono = { version = "0.4.19", default-features = false, features = ["clock"] }security-framework相关特性就不需要链接系统Security框架。 - 如果必须使用chrono的全部默认特性,可以手动给Rust编译器添加链接参数,在项目根目录创建
.cargo/config.toml文件,添加以下配置:
该配置会强制链接器到系统默认框架目录查找Security框架,不需要修改系统全局配置即可生效。# 适配Intel架构Mac [target.x86_64-apple-darwin] rustflags = [ "-C", "link-arg=-F/System/Library/Frameworks", "-C", "link-arg=-framework", "-C", "link-arg=Security" ] # 适配Apple Silicon架构Mac [target.aarch64-apple-darwin] rustflags = [ "-C", "link-arg=-F/System/Library/Frameworks", "-C", "link-arg=-framework", "-C", "link-arg=Security" ]
Docker环境是Linux系统,chrono在Linux下不会调用Security框架,所以不会触发该问题。
内容的提问来源于stack exchange,提问作者log N
相关产品推荐
相关产品推荐

