将 libpq.5.dylib 复制到 /usr/lib/libpq.5.dylib

copy libpq.5.dylib to /usr/lib/libpq.5.dylib

我无法在 R 中加载包,因为文件 libpq.5.dylib 不在 /usr/lib/libpq.5.dylib 中。它在 /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib

我尝试了这一行:sudo ln -s /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib /usr/lib/libpq.5.dylib 但我得到了这样的回复:ln: /usr/lib/libpq.5.dylib: Operation not permitted

我怎样做才能在 /usr/lib/libpq.5.dylib 中获取文件而不引起问题?这 solution 表明我可能会遇到问题,所以我不知道该怎么做。

你真的不想要 /usr/lib。 Apple 声明为 off-limits,在较新的 macOS 版本上,它位于 read-only 卷上。除非您愿意进入恢复模式并手动篡改音量(并可能在以后的 OS 更新中重复此操作),否则这不是正确的方法。

相反,让我们解决核心问题:
macOS 上的动态库在二进制文件中嵌入了自己的安装路径,linker 将其复制到二进制文件 linking 中。可以使用 install_name_tool 更改此信息(请参阅 man install_name_tool)。

  1. 检查dylib的安装名称:

    otool -l /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib | fgrep -A2 LC_ID_DYLIB
    

    如果打印的路径已经指向 dylib 本身(或符号 linked 到它的路径),请将此路径用作下面的 [new_path],并跳过第 2 步。

  2. 如果 dylib 的安装名称确实指向自身,运行 this:

    sudo install_name_tool -id /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib
    

    下面的 [new_path] 使用 /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib

  3. 对于 link 针对 dylib 的二进制文件,运行:

    sudo install_name_tool -change /usr/lib/libpq.5.dylib [new_path] [path_to_binary]