繁体   English   中英

将 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中获取文件而不引起问题? 这个解决方案表明我可能会面临问题,所以我不知道该怎么做。

你真的不希望它在/usr/lib中。 Apple 宣布这是禁区,并且在较新的 macOS 版本上,它存在于只读卷上。 除非您愿意进入恢复模式并手动篡改卷(并可能在未来的操作系统更新中重复),否则这不是要走的路。

相反,让我们解决核心问题:
macOS 上的动态库在二进制文件中嵌入了自己的安装路径,链接器将其复制到链接到它们的二进制文件中。 可以使用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 本身(或符号链接到它的路径),请将此路径用作下面的[new_path] ,并跳过步骤 2。

  2. 如果 dylib 的安装名称指向自身,请运行以下命令:

     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. 对于链接到 dylib 的二进制文件,运行:

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

我在通过 docker 构建容器以供 API 使用时遇到了同样的问题:RPostgres 已安装,但库无法加载,同样的错误消息。 由于我在我的机器上安装了 Postgres,我认为问题已经解决,因此我在 local 上没有这样的消息; 但这是我在 dockerfile 中解决这个问题的方法,在没有安装 R 的机器上 100% 验证:

RUN apt-get update && apt-get install libpq5 -y

因此,在您的终端上执行apt-get update && apt-get install libpq5 -y应该可以解决问题。 轻便高效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM