OpenSSL、RVM、Brew冲突错误

19

当我在终端中运行 brew doctor 命令时,会出现以下错误:

Warning: Some keg-only formula are linked into the Cellar.
You may wish to `brew unlink` these brews:

openssl
如果我取消链接并键入rvm requirements,我会收到以下错误。
Checking requirements for osx.
dyld: Library not loaded: @@HOMEBREW_CELLAR@@/openssl/1.0.1f/lib/libssl.1.0.0.dylib
  Referenced from: /usr/local/opt/openssl/bin/openssl
  Reason: image not found
Failed reading certificates path for '/usr/local/opt/openssl/bin/openssl' with return       code: ().
RVM autolibs is now configured with mode '2' => 'check and stop if missing',
please run `rvm autolibs enable` to let RVM do its job or run and read `rvm autolibs [help]`
or visit https://rvm.io/rvm/autolibs for more information.
Requirements installation failed with status: 133.
当我运行brew unlink openssl时,我的ssl版本从OpenSSL 1.0.1f 6 Jan 2014更改为OpenSSL 0.9.8y 5 Feb 2013。所以问题是:怎样才能让Brew Doctor和RVM的要求都符合?是通过拥有相同的OpenSSL版本吗?(假设)

不行!我听说MacPorts会与Homebrew冲突,所以我没有安装它。 - user2870541
1
你尝试过执行 brew reinstall openssl 吗? - Roman Kiselenko
是的,它能正常工作。OpenSSL也正常工作。但它运行的版本是0.9而不是1.0,这就是导致问题的原因。 - user2870541
6个回答

74
尝试执行brew reinstall openssl,然后执行brew link openssl --force

Homebrew不再允许在此使用--force选项。 - Duke

16

恒杰已经完成了一半。

问题在于OSX预装了一个位于/usr/bin的openssl版本。请尝试以下方法:

$ /usr/bin/openssl version

当Homebrew安装OpenSSL时,它会将其安装到/usr/local/Cellar/openssl,但默认情况下,由于版本冲突,它不会创建链接。要创建链接,您需要输入以下命令:

$ brew link --force openssl

这将创建指向brew版本的符号链接,您可以通过输入以下内容来查看新版本号:

$ /usr/local/bin/openssl version

还有一个最后的问题。如果你的路径变量设置中 /usr/bin 在 /usr/local/bin 之前,那么就会发生问题。输入以下命令:
$ echo $PATH

如果您在/usr/local/bin之前看到/usr/bin,则需要更新您的.bash_profile文件,使其包含以下内容:
export PATH="/usr/local/bin:$PATH"

这意味着新版本将会在旧版本之前被使用。

警告:brew软件包表示“Mac OS X已经提供了此软件,并且安装另一个版本可能会造成各种问题。”

因此,使用时需自担风险!我实际上不知道“各种问题”是什么。


非常棒的回复,对我帮助很大。 - Ashesh
这甚至可以在最新的Mac 10.10 Yosemite上运行。谢谢。 - Bibek Shrestha
强制链接 OpenSSL 是否违反最佳实践?https://github.com/Homebrew/brew/commit/b999edb3448793529aea8b29c01b3851bbc3b3eb - Shannon
新版本的homebrew开始拒绝使用brew link --force链接openssl。为了解决这个问题并强制rvm使用brew版本的openssl,您需要将其设置在您的PATH上:export PATH="/usr/local/opt/openssl/bin:/usr/local/sbin:/usr/local/bin:$PATH"。将其放入~/.bash_profile中以使其持久化。 - TrinitronX

5

在Mavericks上遇到了相同的错误,只需运行“brew remove openssl”,然后运行“rvm install ruby”。

RVM现在将安装正确版本的OpenSSL。


0

这似乎是需要注意的关键点,我已经复制并粘贴到文本文档中以备后用。 通常情况下,这对您没有任何影响。如果您构建自己的软件并且需要使用此公式,则需要将其添加到构建变量中:

LDFLAGS:  -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include

但是有没有人认为这会对我们的Mac产生影响呢? 强制链接到现有的openssl是否更好?还是必须使用来自homebrew的版本才能正确设置我们的Ruby开发环境。 我很想知道,因为我正在进行大量配置,以便开发网站,并且我希望我的开发环境尽可能稳定。 我感激您的任何回复,在经过一学期的Unix和大量其他研究之后,仍然有很多要了解的!但知识就是力量!


0

特别适用于Mojave操作系统,

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /`

来自https://gorails.com/setup/osx/10.14-mojave


0

或者执行命令"which openssl",将其复制到"/usr/local/opt/openssl/bin/openssl"。然后再试一下。 问题是"/usr/local/opt/openssl/bin/openssl"有旧的或损坏的证书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接