【问题标题】:copy libpq.5.dylib to /usr/lib/libpq.5.dylib将 libpq.5.dylib 复制到 /usr/lib/libpq.5.dylib
【发布时间】:2020-11-21 17:33:45
【问题描述】:

我无法在 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 表明我可能会遇到问题,所以我不知道该怎么做。

【问题讨论】:

    标签: r macos sf dylib libpq


    【解决方案1】:

    你真的不希望它出现在 /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]
      

    【讨论】:

    • 我不确定二进制路径。我不清楚 3。这是我在 R 中看到的错误:错误:dyn.load(file, DLLpath = DLLpath, ...) 中的 'tidycensus' 的包或命名空间加载失败:无法加载共享对象' /Library/Frameworks/R.framework/Versions/4.0/Resources/library/sf/libs/sf.so':dlopen(/Library/Frameworks/R.framework/Versions/4.0/Resources/library/sf/libs/sf .so,6):库未加载:/usr/lib/libpq.5.dylib 引用自:/Library/Frameworks/R.framework/Versions/4.0/Resources/library/sf/libs/sf.so 原因:图像没找到
    • 那么你要编辑的二进制文件是/Library/Frameworks/R.framework/Versions/4.0/Resources/library/sf/libs/sf.so
    • 所以第 3 步是: sudo install_name_tool -change /usr/lib/libpq.5.dylib /usr/local/Cellar/libpq/13.0/lib/libpq.5.dylib/Library/Frameworks/ R.framework/Versions/4.0/Resources/library/sf/libs/sf.so
    • 非常感谢!完美运行。每次我更新到新的主要 R 版本并且必须再次安装所有软件包时都会发生这种情况,例如 sf(在 macOS 上)。
    • 我总是遇到使用错误 - sudo install_name_tool -change /usr/local/Cellar/libpq/14.2/lib/libpq.5.dylib /usr/lib/libpq.5.dylib 用法:/Library /Developer/CommandLineTools/usr/bin/install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] 输入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2012-02-19
    • 2022-09-28
    • 1970-01-01
    • 2014-08-28
    • 2016-07-19
    • 2014-09-28
    相关资源
    最近更新 更多