我正在开发一个软件包,该软件包需要在所有用户帐户均可全局访问的位置安装dylib。我实际上不确定最好的放置位置在哪里。
通常,我认为/usr/local/lib
是正确的,但偶尔会遇到用户使用该文件夹执行奇怪操作的用户,包括更改其权限,以便只有一个用户可以访问其中的文件,从而破坏了该系统上其他用户帐户的软件。从技术上讲,这种事情在macOS上是不允许的-/usr/local
旨在成为用户可以随意使用的地方。
替代解决方案可以在/Library/Frameworks
或中/Library/Application Support/<my app name>
。这些文件夹肯定会更安全,因为用户不应随意使用它们,也不会修改其权限。但是,对于动态库,这两个地方都没有让我感到正确。/Library/Frameworks
最接近,我想我还遇到了其他将dylib放在其中的应用程序,但显然是针对框架的。
那么放置它的正确位置在哪里?
对于文件系统位置,Mac有点奇怪,由于主要引导文件系统是只读的,因此在macOS 10.15(Catalina)发行后,Mac将变得更加困难。
根据访问库的目的,有一些适当的位置可以放置它。
如果您有一个应用程序正在全局安装在 /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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句