macOS 如何同时安装 OpenSSL 的动态链接库 libssl.1.1.dylib 和 libssl.1.0.0.dylib?

2020-04-27 21:16:43 +08:00
 johannhuang
我遇到的情况是这样的,从 GitHub 下载了一个 C++的项目代码,然后 cmake 的时候出现了下面的报错信息

```
dyld: Library not loaded: /opt/local/lib/libssl.1.0.0.dylib
Referenced from: /opt/local/lib/libcurl.4.dylib
Reason: image not found
Abort trap: 6
```

我的 OpenSSL 是经过 Homebrew 新安装过的,所以我能在 /opt/local/lib/目录下找到 libssl.dylib, libssl.a, libssl.1.1.dylib 。也就是很明显,现在的最新版就是 1.1,然而不知道项目里面那个地方使用了 libcurl,而 libcurl 似乎硬性指定了使用 libssl.1.0.0.dylib (我对 C++编译系统理解有限,也许是其他环境变量设置问题),所以因为缺少 1.0.。0 版本导致报错。

所以各位技术朋友,你们指定 macOS 上怎么同时优雅的存在 libssl.1.1.dylib 以及 libssl.1.0.0.dylib 么?
4178 次点击
所在节点    macOS
16 条回复
johannhuang
2020-04-27 21:19:43 +08:00
V2 上的相关问题及链接

- 哪里下载 libssl.so.1.0.0 和 libcrypt.so.1.0.0 ?,https://www.v2ex.com/t/366463
- MacOS Catalina Python 意外退出解决,https://www.v2ex.com/t/609382
- 请问升级 OpenSSL 的问题。,https://www.v2ex.com/t/654914

然而,上面问题的解决办法我担心会破坏本身使用新版 libssl1.1.dylib 的情况。
johannhuang
2020-04-27 21:29:50 +08:00
问题感觉还是应该从解决 libcurl 入手,因为我强行 给 1.0.0 加链接到 1.1 后,还是报错了。

```
dyld: Symbol not found: _MD5_Final
Referenced from: /opt/local/lib/libcurl.4.dylib
Expected in: /opt/local/lib/libcrypto.1.0.0.dylib
in /opt/local/lib/libcurl.4.dylib
Abort trap: 6
```
Kobayashi
2020-04-27 22:41:16 +08:00
把项目发出来,等楼下。
lcdtyph
2020-04-27 22:43:58 +08:00
/opt/local 不是 macports 的 prefix 吗?
arischow
2020-04-27 22:45:14 +08:00
我上次跑 wget 出现类似错误,于是我 brew reinstall wget
arischow
2020-04-27 22:45:59 +08:00
楼上说得有点道理,看起来 prefix 不是 homebrew 🉐️
IgniteWhite
2020-04-27 23:23:12 +08:00
prefix 一般是 /usr/local
arischow
2020-04-27 23:35:45 +08:00
brew switch 了解一下,另 你这个问题 Google 有答案。
tianshilei1992
2020-04-27 23:53:25 +08:00
CMake 查找 library 的规则是 hard code 在 CMake 自己里面的。不妨试试有什么环境变量可以让 CMake 优先去查找你自己装的这个 library path 。
还有一个办法就是(一定会成功),找找 find_library(ssl) 成功以后会设置哪些 CMake 的变量,然后在 CMake 的时候把这几个变量手动指定进去就好了。
johannhuang
2020-04-28 03:11:48 +08:00
@arischow 我这个问题 Goolge 上有很多错误答案。要不然也不会在这里贴出来求助了。
johannhuang
2020-04-28 03:13:44 +08:00
@Kobayashi 这个和项目没啥关系了,因为错误报的算是很明确了。就是这玩意儿 /opt/local/lib/libcurl.4.dylib 引用不到想要的动态链接库了。
johannhuang
2020-04-28 04:23:17 +08:00
@lcdtyph 谢谢 应该就是你说的 macports 搞事情了。我之前用过 macports,可能就是被 ports 搞出问题了。
lcdtyph
2020-04-28 04:27:24 +08:00
@johannhuang #12
你可以都用 homebrew 的组件,brew install curl-openssl 这个 curl 是 link 到 brew 自己的 openssl1.1 的
如果你不需要 macports 的话最好把它的路径从环境变量里移除
johannhuang
2020-04-28 04:41:09 +08:00
问题相关链接,以防有后来的小伙伴遇到同样的问题 https://stackoverflow.com/questions/44290925/curl-gives-an-error-on-mac-os
Kobayashi
2020-04-28 12:04:35 +08:00
你这是 macports 没卸载啊?环境变量 PATH 里还有 /opt/local/bin
johannhuang
2020-04-28 15:55:43 +08:00
@lcdtyph 我把 macports 的包升级了后就可以了。Homebrew 使用的 link 的方式,MacPorts 用的环境变量前置,我还是想都留着的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/666738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX