macOS:在用户系统上安装dylib的正确位置是什么?

盖·吉兹莫

我正在开发一个软件包,该软件包需要在所有用户帐户均可全局访问的位置安装dylib。我实际上不确定最好的放置位置在哪里。

通常,我认为/usr/local/lib是正确的,但偶尔会遇到用户使用该文件夹执行奇怪操作的用户,包括更改其权限,以便只有一个用户可以访问其中的文件,从而破坏了该系统上其他用户帐户的软件。从技术上讲,这种事情在macOS上是不允许的-/usr/local旨在成为用户可以随意使用的地方。

替代解决方案可以在/Library/Frameworks或中/Library/Application Support/<my app name>这些文件夹肯定会更安全,因为用户不应随意使用它们,也不会修改其权限。但是,对于动态库,这两个地方都没有让我感到正确。/Library/Frameworks最接近,我想我还遇到了其他将dylib放在其中的应用程序,但显然是针对框架的。

那么放置它的正确位置在哪里?

gaige

对于文件系统位置,Mac有点奇怪,由于主要引导文件系统是只读的,因此在macOS 10.15(Catalina)发行后,Mac将变得更加困难。

根据访问库的目的,有一些适当的位置可以放置它。

在您的应用程序包中

如果您有一个应用程序正在全局安装在 /Applications文件夹(大多数应用程序在Mac上,但是有时用户会将它们放在奇怪的地方),那么您可以使用应用程序自己的文件夹来存储库,并且该文件对于在该文件夹中可以读取的任何代码都可用。但是,这样做有很多问题:用户可以移动应用程序,权限可能是错误的,并且在使用Apple Hardened Runtime的任何代码中都必须小心,因为它需要特殊的标志来加载任何其他人签名的代码而不是加载库的应用程序上的签名者。好处是删除应用程序也会删除您的库,因此您无需编写卸载程序。VMWare Fusion等软件(如果需要运行命令行代码或类似代码)将使用此技术,并且

/图书馆/应用程序支持或/图书馆/框架

如果你需要的库是持久的,并保证在一个明确定义的位置,然后让用户批准安装成/Library/Application Support/<your application>或成/Library/Frameworks可能是你最好的选择。

/ usr /本地/ lib

正如您已经注意到的那样,这/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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我的Python软件包应在用户系统上的什么位置添加文件?

安装 Git 的正确位置是什么?

配置Linux安装分区系统的正确方法是什么?

由系统管理员在Debian上创建的systemd服务的正确位置是什么?

通过brew安装了mysql,但是终端找不到它。在macOS上为其别名的正确方法是什么?

dll在Linux系统上的默认位置是什么?

在MacOS(Apple / Mac)上安装Conda的最佳方法是什么?

vmware vCenter上安装的默认文件系统是什么?

防止XSS攻击包含在用户提供的链接中的正确方法是什么?

防止程序在用户在Java中输入错误的输入后退出的正确方法是什么?

wsl 的代码路径是什么,因此 Vscode 安装在用户配置文件中

我的系统上的沙箱用户'_apt'是什么

在用户帐户上安装imagemagick

linux上mysql.sock文件的正确位置是什么

在用 DataTable 填充的 DataGridView 上使用 RowFilter 的正确方法是什么?

在Linux上安装docker并使用它的正确方法是什么?

在 Ubuntu 上安装 pip3 的正确方法是什么?

在Linux上安装JDK的正确方法是什么

在Mac上安装Django的正确方法是什么

为什么安装的nas在用户分区上显示0个inode?

无法在禁用 root 用户的系统上安装 Hplip(密码不正确,无法安装依赖项)

如何在 MacOS 上安装 libEGL.dylib?

放在用户定义的方法中以重命名C#中的变量的正确方法或关键字是什么?

将go软件包安装到系统路径的正确方法是什么?

MacOS系统偏好设置图标上的通知“徽章”实际上是什么意思?

macOS Mach-O dylib LC_ID_DYLIB名称或install_name的意义是什么?

正确使用播放模板系统是什么

在用户的位置传单上绘制多边形

在MacOS上使用tfvc时,正确的合并脚本是什么?