我通过homebrew安装了vapor,然后立即想通过执行vapor new Hello进入一个项目,但随后在终端中得到了以下消息:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /usr/local/bin/vapor
Reason: image not found
zsh: abort      vapor new Hello

我尝试了一些方法来解决这个问题,比如通过brew卸载并重新安装openssl,但这并不奏效。我还尝试了一些我在网上找到的东西,但没有工作。我认为这与蒸汽只适用于1.0.0版本有关,而不是1.1.1版本,这就是我所拥有的。我想我需要降级到1.0.0,但我是怎么做到的?我在用MacOS卡塔琳娜,如果有关系的话。


当前回答

在macOS 10.9.5和macports 2.8.0的机器上:

sudo -s ln -s /opt/local/lib/openssl-1.0/libcrypto.1.0.0.dylib /opt/local/lib/libcrypto.1.0.0.dylib  

帮助

其他回答

我尝试了上面提出的几种解决方案,但都没有成功。

所以,我已经用rbenv安装了ruby 2.7.2的最新版本,并升级了我的应用程序。

然后我有一个PG::ConnectionBad错误。

我跑

brew postgresql-upgrade-database.

现在运行正常了。

这里有更多关于我尝试的细节。

我在我的系统上安装了openssl1.1,但是rails以某种方式使用了旧的引用,即/usr/local/opt/openssl/lib/libssl.1.0.0。dylib (LoadError),但这在我的Mojave 14上不存在。

我尝试了下面的解决方案,但运气不佳:

openssl 1.0.2t (Error: Unknown command: switch) reintalling openssl 将openssl版本降级至1.0 重新安装rvm和ruby

最后,解决方案如下:

cp /usr/local/opt/openssl/lib/libssl.1.1.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
cp /usr/local/opt/openssl/lib/libcrypto.1.1.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib

只需复制新的openssl链接到旧的

OR

创建如下的符号链接:

ln -sfn /usr/local/Cellar/openssl@1.0/1.0.2t /usr/local/opt/openssl@1.0

在搜索这个错误的第一行后,我发现了这个问题:

dyld: Library not loaded: /opt/local/lib/libcrypto.1.0.0.dylib
  Referenced from: /opt/local/lib/libgssapi_krb5.2.2.dylib
  Reason: image not found
Abort trap: 6

我看到的不是使用vapor,而是在升级一些包后使用ssh、scp和git的结果。

我认为像@Smokie和其他人建议的那样降级大多数包是不明智的(特别是与安全相关的包)。

所以我概括了@ michalchicon发布的关于用install_name_tool解决问题的答案,这似乎已经解决了我的问题(至少现在用ssh和scp;我认为如果问题再次出现在另一个可执行文件中,我将能够使用这个解决方案的变体)。

因为它是不存在的/opt/local/lib/libcrypt .1.0.0。因为我有一个/opt/local/lib/libcrypt .1.1。由于SSH和SCP正在引用/opt/local/lib/libgssapi_krb5.2.2。Dylib试图找到/opt/local/lib/libcrypt .1.0.0。dylib,我只是像这样使用install_name_tool:

$ sudo install_name_tool -change /opt/local/lib/libcrypto.1.0.0.dylib\
/opt/local/lib/libcrypto.1.1.dylib\
/opt/local/lib/libgssapi_krb5.2.2.dylib

然后再次尝试运行ssh。它再次失败了,但这次出现了不同的错误:

dyld: Library not loaded: /opt/local/lib/libcrypto.1.0.0.dylib
  Referenced from: /opt/local/lib/libkrb5.3.3.dylib
  Reason: image not found
Abort trap: 6

于是我就这样做了:

$ sudo install_name_tool -change /opt/local/lib/libcrypto.1.0.0.dylib\
/opt/local/lib/libcrypto.1.1.dylib\
/opt/local/lib/libkrb5.3.3.dylib

再次尝试SSH。它再次失败了,但又出现了另一个错误:

dyld: Library not loaded: /opt/local/lib/libcrypto.1.0.0.dylib
  Referenced from: /opt/local/lib/libk5crypto.3.1.dylib
  Reason: image not found
Abort trap: 6

于是我就这样做了:

$ sudo install_name_tool -change /opt/local/lib/libcrypto.1.0.0.dylib\
/opt/local/lib/libcrypto.1.1.dylib\
/opt/local/lib/libk5crypto.3.1.dylib

再次尝试SSH。它再次失败了,但又出现了另一个错误:

dyld: Library not loaded: /opt/local/lib/libcrypto.1.0.0.dylib
  Referenced from: /opt/local/lib/libkrb5support.1.1.dylib
  Reason: image not found
Abort trap: 6

于是我就这样做了:

$ sudo install_name_tool -change /opt/local/lib/libcrypto.1.0.0.dylib\
/opt/local/lib/libcrypto.1.1.dylib\
/opt/local/lib/libkrb5support.1.1.dylib

再次尝试SSH。最后,ssh、scp和git恢复正常工作。

感谢@ michalchicon的精彩回答,让我能够在不降级openssl的情况下继续使用ssh !

brew switch openssl 1.0.2t

凯特琳娜,没事的。

更新:截至2020年12月及以后,酿造开关不工作,所以使用@angabriel的另一个答案:

brew install rbenv/tap/openssl@1.0
ln -sfn /usr/local/Cellar/openssl@1.0/1.0.2t /usr/local/opt/openssl

最初的回答: 切换到旧的openssl包

brew switch openssl 1.0.2s

或者,根据您的具体系统配置,您可能需要切换到不同的版本。查看ls -al /usr/local/Cellar/openssl的输出信息,查看要切换到的版本号。

brew switch openssl 1.0.2q
# or
brew switch openssl 1.0.2r
# or 
brew switch openssl 1.0.2s
# or
brew switch openssl 1.0.2t
# etc...