gpt4 book ai didi

macos - 为什么 Homebrew 创建了/usr/local/opt 目录,我应该使用它吗?

转载 作者:行者123 更新时间:2023-12-03 01:18:32 25 4
gpt4 key购买 nike

我对使用 Homebrew 程序还很陌生,我正在尝试弄清楚在我自己的项目中使用一些库(例如boost、gsl、openblas)是如何工作的。

我知道每个公式都是由 Homebrew 安装在/usr/local/Cellar/中,然后符号链接(symbolic link)到 usr/local/bin、usr/local/lib、usr/local/include 中,所以看来,除了 keg -仅公式,因此不会与操作系统已安装的库混淆(例如,参见Understand homebrew and keg-only dependencies)。但我发现每个公式都链接到/usr/local/opt 目录。

所以我的问题是为什么会有这个/usr/local/opt 目录(它有点多余),以及我必须使用什么路径来使用公式(usr/local/Cellar 或 usr/local/或 usr/local/opt 基本上)?

最佳答案

它提供了公式内容的路径,该路径不会因版本升级而改变。

考虑这种情况:假设您构建 libfoo.dylib与 Homebrew 。它是版本 2.0.0,因此它位于 /usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib 。您想从您正在构建的另一个程序链接到它,因此您传递 -L/usr/local/Cellar/libfoo/2.0.0/lib -lfoogcc 。你的程序编译了。随后,您升级到 libfoo 2.0.1 并删除 v2.0.0。现在/usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib不再存在,并且您的程序不再运行,因为它无法动态加载 libfoo。

没关系。 libfoo.dylib也可通过 /usr/local/lib/libfoo.dylib 获取。它是最新版本 libfoo 的符号链接(symbolic link),因此它应该始终存在。所以你通过了-L/usr/local/lib -lfoo到你的程序并编译它。稍后升级到 libfoo 2.0.1。没问题,因为/usr/local/lib/libfoo.dylib仍然存在并指向 v2.0.1 副本。

那太好了,Homebrew 就以这个系统存在了一段时间。问题是,某些公式是“仅桶”的,因此它们没有从 /usr/local 进行符号链接(symbolic link)。 。 (通常它们是仅桶的,因为它们隐藏了 OS X 附带的库的版本,并且取代 OS X 库可能会导致问题。)假设您想要链接到该库的仅桶版本。它没有从 /usr/local/lib 进行符号链接(symbolic link),因此您必须提供 /usr/local/Cellar 中安装的版本的完整路径,这会让您回到上面列出的第一个问题。

/usr/local/opt解决了这个问题。它为当前版本的所有公式提供了符号链接(symbolic link)的位置,无论它们是否仅是桶。现在,当你想编译你的程序时,你可以使用 -L/usr/local/opt/libfoo/lib -lfoo ,并且您的程序将链接到最新版本的 libfoo,即使您升级了它并且即使它是仅 keg 的。

关于macos - 为什么 Homebrew 创建了/usr/local/opt 目录,我应该使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35337601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com