Guy*_*zmo 5 macos shared-libraries dylib
我正在开发一个软件包,需要在所有用户帐户都可以访问的某个地方安装一个 dylib。我实际上不确定把它放在哪里最好。
通常我认为/usr/local/lib是正确的,但偶尔我们会遇到用户对该文件夹做奇怪的事情,包括更改其权限,以便只有一个用户可以访问其中的文件,从而破坏了该系统上其他用户帐户的软件。从技术上讲,macOS 不允许这种事情——/usr/local旨在成为用户可以随意使用的地方。
另一种解决方案可能是/Library/Frameworks或/Library/Application Support/<my app name>。这些文件夹肯定会更安全,因为用户不应该随意使用它们,也不应该修改他们的权限。然而,这两个地方都没有让我觉得动态库是正确的。/Library/Frameworks最接近,我想我遇到了其他将 dylib 放在那里的应用程序,但它显然是用于框架的。
那么放置它的正确位置在哪里?
Mac 在文件系统位置方面有点奇怪,而且在 macOS 10.15 (Catalina) 发布后,由于主引导文件系统是只读的,它会变得更加困难。
根据访问图书馆的目的,有一些合适的地方可以放置它。
如果您有一个应用程序全局安装在该/Applications文件夹中(大多数应用程序都在 Mac 上,但有时用户将它们放在奇怪的地方),那么您可以使用应用程序自己的文件夹来存储库,并且可以使用它可以在该文件夹中读取的任何代码。不过,这存在许多问题:用户可以移动应用程序,权限可能错误,并且您必须小心使用 Apple Hardened Runtime 的任何代码,因为它需要特殊标志来加载由任何其他人签名的代码比加载库的应用程序上的签名者更重要。优点是删除应用程序也会删除您的库,因此您不需要编写卸载程序。VMWare Fusion 等软件使用此技术(如果您需要运行命令行代码或类似代码),并且
如果您需要该库持久存在并保证位于一个明确定义的位置,那么让用户批准您的安装/Library/Application Support/<your application>可能/Library/Frameworks是您最好的选择。
正如您已经注意到的,/usr/local/lib可能会出现问题,特别是因为流行的Homebrew包管理器通常将 _ 设置/usr/local/lib为由使用brew 安装文件的用户拥有,以便可以对其进行修改而无需sudo.
尽管如此,您可以在 中安装/usr/local/lib,但前提是您可能需要升级权限才能执行安装。安装完成后,该目录通常被设置为可供系统上的任何其他用户读取。
作为一名长期的 Mac 用户,我更喜欢应用程序将自己包含在(代码方面)其应用程序包中,因此鼓励使用该机制。用户不安装的缺点/Applications可以通过让应用程序本身在运行时进行检查以确保其位于正确的位置来减轻,如果没有,则提示用户移动它(或在请求权限后进行移动)海拔)。这也消除了对安装程序/卸载程序的需要。
如果由于某种原因这是不可接受的,那么/Library/Frameworks或/Library/Application Support/<your application>将是您的下一个最佳选择。与 相比,它们制造问题的可能性要小得多/usr/local/lib。