【问题标题】:PyPy does not work on MacOS 10.9.5PyPy 不适用于 MacOS 10.9.5
【发布时间】:2018-02-28 18:44:48
【问题描述】:

我正在尝试在 MacOS 10.9.5 上安装 PyPy。 作为第一次尝试,我直接从官方网站下载了包含二进制文件的 tarball,解压缩并在 bash 中启动 pypy。我得到了这个:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /Users/<MY_USER>/opt/pypy2-v5.10.0-osx64/bin//libpypy-c.dylib
Reason: image not found
Trace/BPT trap: 5

所以我尝试使用sudo port install openssl 安装openssl,但错误仍然存​​在。我也尝试通过sudo port install pypy 安装pypy,但我得到了同样的错误。

有什么帮助吗?

【问题讨论】:

    标签: macos macports pypy libssl


    【解决方案1】:

    这是 macOS 上的一个常见误解 - macOS 上的库不仅仅通过名称引用,而是通过绝对路径引用。因此,安装在 /opt/local 中的 MacPorts OpenSSL 不能满足 PyPy 附带的库的要求,因为它需要 /usr/local/opt/openssl 中的库。

    我在几天前在 macports-users 列表中引用了我自己的一封电子邮件,其中解释了详细信息:

    使用绝对路径从二进制文件中引用 macOS 库。

    在技术层面上,当您使用 -lcurl 链接二进制文件时 命令行,链接器将在搜索路径中找到 libcurl.dylib 你已经在命令行上给出了(应该是 -L/opt/local/lib 供使用 与 MacPorts)。然后它将从文件中读取库 id。对于我们的 MacPorts 的 libcurl 示例,这是:

    $> otool -D /opt/local/lib/libcurl.dylib
    /opt/local/lib/libcurl.4.dylib
    

    然后,此路径将被复制到链接的二进制文件中。您可以验证这一点 使用 MacPorts curl 二进制文件:

    $> otool -L /opt/local/bin/curl | grep libcurl
    /opt/local/lib/libcurl.4.dylib (compatibility version 10.0.0, current version 10.0.0)
    

    当您运行 /opt/local/bin/curl 时,加载程序会读取此表并找到 这个文件使用它的绝对路径。设置 DYLD_LIBRARY_PATH 会覆盖这个 并尝试在目录中找到具有给定基本名称的文件 在 DYLD_LIBRARY_PATH 中给出,但如果库和二进制文件已经 正确构建(而不是移动),您永远不必设置它。

    当然,这会使您的二进制文件不可重定位。如果你想搬家 二进制文件,您可以使用特殊变量@loader_path 使用相对路径, @executable_path 和 @rpath。请参阅 dylibbundle 端口,这主要是 如果您使用 -headerpad_max_install_names 构建二进制文件,则会自动执行此操作 链接器标志(MacPorts 默认会这样做)。

    要解决您的问题,您可以设置 DYLD_FALLBACK_LIBRARY_PATH 并希望这些库是二进制兼容的(它们可能兼容也可能不兼容)或使用install_name_tool -change(它的作用相同,但在文件中而不是在环境中)。但是,您应该询问为您提供此二进制文件的人,他们希望您如何运行它以及从何处获得匹配的 OpenSSL 库。

    【讨论】:

      猜你喜欢
      • 2020-06-26
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2018-03-07
      • 2018-03-29
      相关资源
      最近更新 更多