PyPy不适用于MacOS 10.9.5

PyPy不适用于MacOS 10.9.5,macos,macports,pypy,libssl,Macos,Macports,Pypy,Libssl,我正在尝试在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 Reaso

我正在尝试在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
dyld:Library未加载:/usr/local/opt/openssl/lib/libssl.1.0.0.dylib
引用自:/Users//opt/pypy2-v5.10.0-osx64/bin///libpypy-c.dylib
原因:找不到图像
跟踪/BPT陷阱:5
因此,我尝试使用
sudo端口安装openssl
安装openssl,但错误依然存在。我还尝试通过
sudo端口安装pypypy
安装pypypy,但我遇到了相同的错误


有什么帮助吗?

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

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

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

在技术层面上,当您将二进制文件链接到,例如,-lcurl on 在命令行中,链接器将在搜索路径中找到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\u LIBRARY\u路径将覆盖此选项 并尝试在目录中查找具有给定basename的文件 在DYLD_LIBRARY_PATH中给定,但如果库和二进制文件已 正确构建(而不是移动)您不必设置它

当然,这会使您的二进制文件不可重新定位。如果你想重新安置 二进制文件,您可以使用特殊变量@loader\u path使用相对路径, @可执行路径和@rpath。请参阅dylibbundler端口,它主要是 如果您使用-headerpad\u max\u install\u名称构建二进制文件,则会自动执行此操作 链接器标志(默认情况下MacPorts会使用该标志)

为了解决您的问题,您可以设置DYLD\u FALLBACK\u LIBRARY\u PATH,并希望这些库是二进制兼容的(它们可能是也可能不是),或者使用
install\u name\u tool-change
(其作用相同,但在文件中,而不是在环境中)。但是,您应该询问谁给了您这个二进制文件,他们希望您如何运行它,以及从哪里获得匹配的OpenSSL库