macOS 10.12 Sierra下brew安装openssl 1.1.1l编译报错解决方案求助
macOS 10.12 Sierra下Homebrew安装openssl 1.1.1l编译报错解决方案
报错根因
本次编译错误是macOS 10.12.6自带的CommonCrypto框架版本过低,缺少openssl 1.1.1l依赖的CCCryptorStatus类型定义和kCCSuccess枚举值,属于旧系统与新版openssl的兼容性问题。
方案1:修复编译问题直接安装openssl 1.1.1l
无需更换依赖,直接修改源码适配旧系统即可完成编译:
- 进入Homebrew缓存目录:
cd /Users/user/Library/Caches/Homebrew/downloads/ - 解压已下载的openssl源码包:
tar zxf b6ccc5a2a602c2af3480bbcf1656bd9844595974ba60501871ac12504508e818--openssl-1.1.1l.tar.gz - 进入解压后的源码目录,编辑
crypto/rand/rand_unix.c文件:- 找到第38行的
#include <CommonCrypto/CommonRandom.h>,将整行注释 - 找到385行附近调用
CCRandomGenerateBytes的代码块,替换为如下逻辑:FILE *f = fopen("/dev/urandom", "rb"); if (f != NULL) { fread(buf, 1, buflen, f); fclose(f); } else { return 0; }
- 找到第38行的
- 保存修改后,将修改后的源码重新打包覆盖原压缩包,执行
brew install openssl即可完成安装。
方案2:让Python使用已安装的openssl 1.0作为依赖
如果不需要openssl 1.1版本,可以直接强制Python使用已安装的1.0版本,跳过新版安装:
方式A:手动编译Python指定依赖路径
- 先确认openssl 1.0的安装路径,默认是
/usr/local/opt/openssl@1.0 - 下载对应版本的Python源码包,解压后进入源码目录执行配置命令:
./configure --prefix=/usr/local/opt/python@3.9 \ --with-openssl=/usr/local/opt/openssl@1.0 \ --with-openssl-rpath=auto - 执行
make && make install完成安装,将该Python路径加入系统环境变量后,Homebrew会识别到已安装的Python,不会再自动拉取openssl 1.1依赖。
方式B:Homebrew安装时跳过依赖检查
- 执行命令跳过依赖安装Python:
brew install --ignore-dependencies python - 安装完成后在
~/.zshrc(bash用户修改~/.bash_profile)中添加如下环境变量,指定Python调用openssl 1.0的库文件:export LDFLAGS="-L/usr/local/opt/openssl@1.0/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.0/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.0/lib/pkgconfig" - 执行
source ~/.zshrc(对应bash执行source ~/.bash_profile)使配置生效即可。
内容的提问来源于stack exchange,提问作者vinayman
相关产品推荐
相关产品推荐

