You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为M1和Intel架构构建OpenSSL,生成兼容双架构的Libcrypto胖二进制

方案1:基于现有两个库分别按架构链接

你不需要同时把两个库都加入全局链接列表,Xcode支持按架构条件绑定库,按以下操作即可:

  • 打开项目的Build Phases页面,找到Link Binary With Libraries选项
  • 先移除所有已添加的libcrypto.a、lcrypto.a条目
  • 点击+号把两个库都添加到列表中
  • 分别点击两个库条目右侧的「Required」下拉框,选择「Allow any platform or architecture」,之后新增过滤条件:
    • 给ARM64架构的libcrypto.a添加过滤:Architecture = arm64
    • 给x86_64架构的lcrypto.a添加过滤:Architecture = x86_64
  • 编译时Xcode会自动根据当前构建的架构选择对应的库链接,不会触发架构缺失错误,也能正常构建胖二进制。

注意:由于你手上两个库版本(1.1.1和1.0.2)API存在差异,如果你的代码调用了两个版本不兼容的接口,必须用预编译宏按架构区分实现,否则会出现运行时崩溃,示例如下:

#if __arm64__
// 调用OpenSSL 1.1.1版本兼容的API
#else
// 调用OpenSSL 1.0.2版本兼容的API
#endif

方案2:自行编译统一版本的双架构胖二进制库

如果不想维护两套代码逻辑,建议自己编译同一版本的OpenSSL生成双架构libcrypto.a,之前编译失败大概率是架构参数配置错误,按以下步骤操作即可:

  • 下载对应版本的OpenSSL源码,优先选1.1.1系列稳定版,兼容性更好
  • 分别编译ARM64和x86_64两个架构的静态库,编译时指定对应target:
    • 编译x86_64版本的配置命令:./Configure darwin64-x86_64-cc shared enable-ec_nistp_64_gcc_128 no-ssl2 no-ssl3 no-comp --prefix="自定义输出路径/x86_64"
    • 编译arm64版本的配置命令:./Configure darwin64-arm64-cc shared enable-ec_nistp_64_gcc_128 no-ssl2 no-ssl3 no-comp --prefix="自定义输出路径/arm64"
  • 分别执行make && make install得到两个架构下的libcrypto.a
  • 用lipo命令合并两个静态库为胖二进制:lipo -create arm64路径/libcrypto.a x86_64路径/libcrypto.a -output 输出路径/libcrypto_fat.a
  • 验证合并结果:lipo -info 输出路径/libcrypto_fat.a,输出会显示同时包含x86_64和arm64两个架构,直接将这个库加入项目链接即可。

内容的提问来源于stack exchange,提问作者headbanger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:45:04