在 Mac OS 上安装 Crypt::SSLeay X

Installing Crypt::SSLeay on Mac OS X

尝试在 Mac OS X 上安装 Crypt::SSLeay 时出现以下错误:

$ sudo perl -MCPAN -e shell
cpan[1]> install Crypt::SSLeay
Reading '/Users/.cpan/Metadata'
  Database was generated on Thu, 26 Oct 2017 01:53:54 GMT
Running install for module 'Crypt::SSLeay'
Running make for N/NA/NANIS/Crypt-SSLeay-0.72.tar.gz
Checksum for /Users/.cpan/sources/authors/id/N/NA/NANIS/Crypt-SSLeay-0.72.tar.gz ok
Scanning cache /Users/.cpan/build for sizes
............................................................................DONE

  CPAN.pm: Building N/NA/NANIS/Crypt-SSLeay-0.72.tar.gz

Cannot link with any of the requested SSL libraries 'ssl, crypto, ssl32, ssleay32, eay32, libeay32, z'
No 'Makefile' created'YAML' not installed, will not store persistent state
  NANIS/Crypt-SSLeay-0.72.tar.gz
  /usr/bin/perl Makefile.PL -- NOT OK
Running make test
  Make had some problems, won't test
Running make install
  Make had some problems, won't install
Could not read metadata file. Falling back to other methods to determine prerequisites
Failed during this command:
 NANIS/Crypt-SSLeay-0.72.tar.gz               : writemakefile NO -- No 'Makefile' created

我已经按照找到的说明安装了 openssl hereopenssl version -a 的输出是:

OpenSSL 1.1.0f  25 May 2017
built on: reproducible build, date unspecified
platform: darwin64-x86_64-cc
compiler: cc -DDSO_DLFCN -DHAVE_DLFCN_H -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/usr/local/mac-dev-env/openssl-1.1.0f/ssl\"" -DENGINESDIR="\"/usr/local/mac-dev-env/openssl-1.1.0f/lib/engines-1.1\"" 
OPENSSLDIR: "/usr/local/mac-dev-env/openssl-1.1.0f/ssl"
ENGINESDIR: "/usr/local/mac-dev-env/openssl-1.1.0f/lib/engines-1.1"

我不确定我还能做什么,因为我有所需的 ssl 库,但它似乎 link 没有?

OPENSSLDIR: "/usr/local/mac-dev-env/openssl-1.1.0f/ssl"

这不是 openssl 的标准位置。这解释了为什么它找不到必要的文件:

Cannot link with any of the requested SSL libraries 'ssl, crypto, ssl32, ssleay32, eay32, libeay32, z'

查看 Crypt::SSLeay 的 README 时,您会发现:

If you have OpenSSL headers and libraries in nonstandard locations, you can use
  $ perl Makefile.PL --incpath=... --libpath=...

README 中有进一步说明如何在使用 cpanm 等时设置路径

除此之外,在大多数情况下您不想安装 Crypt::SSLeay,而是 Net::SSLeay。 Crypt::SSLeay 仅支持旧版本的 LWP 工作,所有较新的东西(包括当前版本的 LWP)在 Net::SSLeay.[=14 之上使用 Net::SSLeay 和 IO::Socket::SSL =]

如果这与安装 LWP::Protocol::https 有关,因为您想使用 LWP::UserAgent ...您最好不要安装: IO::Socket::SSL 而不是上述 Crypt::SSLeay

如上所述,在 README 中提到“--incpath”和“--libpath”以使用自定义路径安装 openssl。

所以它应该是这样的(注意:检查你的 openssl 版本,在这个例子中它是 1.1.1d):

$ sudo perl Makefile.PL --incpath="/usr/local/Cellar/openssl@1.1/1.1.1d/include" --libpath="/usr/local/Cellar/openssl@1.1/1.1.1d/lib"

我很难理解应该在这些参数上使用什么路径。那些工作虽然。