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

MacOS 13.1下安装Puma 5.6.4失败的技术求助

解决Puma 5.6.4在Rosetta环境下编译失败的问题

问题分析

从报错信息看,编译Puma 5.6.4时出现Undefined symbols for architecture x86_64: "_SSL_CTX_get0_param",说明编译链接阶段无法找到OpenSSL的SSL_CTX_get0_param函数。Puma 5.x版本的mini_ssl模块引入了该函数,你的环境虽指定了OpenSSL 1.1路径,但链接过程未正确关联对应库;而Puma 4.3.0能成功是因为其未使用这些较新的OpenSSL函数。

解决方案

步骤1:重新安装OpenSSL 1.1并配置环境变量

先卸载现有OpenSSL 1.1再重装,确保文件完整性:

brew uninstall --ignore-dependencies openssl@1.1
brew install openssl@1.1

设置环境变量,让编译工具优先找到正确的OpenSSL路径:

export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

步骤2:手动安装Puma 5.6.4

通过pkg-config明确指定OpenSSL配置文件路径,确保编译时正确关联:

gem install puma -v '5.6.4' -- --with-pkg-config=/usr/local/opt/openssl@1.1/bin/pkg-config --with-cflags="-Wno-error=implicit-function-declaration"

步骤3:若仍失败,重新编译Ruby(关联正确OpenSSL)

如果你的Ruby版本是在未指定OpenSSL路径的情况下编译的,重新安装Ruby并关联OpenSSL 1.1:

rvm uninstall 2.7.5
rvm install 2.7.5 --with-openssl-dir=/usr/local/opt/openssl@1.1

完成后再执行bundle install。

步骤4:通过Bundler配置指定编译参数

若不想每次手动输入参数,可创建.bundle/config文件,让Bundler自动使用指定参数编译Puma:

BUNDLE_BUILD__PUMA: "--with-ldflags=-L/usr/local/opt/openssl@1.1/lib --with-cppflags=-I/usr/local/opt/openssl@1.1/include --with-cflags=\"-Wno-error=implicit-function-declaration\" --with-pkg-config=/usr/local/opt/openssl@1.1/bin/pkgconfig"

保存后执行bundle install即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:00:48