MacOS(Brew环境)运行davtest.pl遇Net::SSL缺失及安装失败求助
问题描述
在带Brew的MacOS系统中运行davtest.pl时,出现Perl模块缺失错误:
Can't locate Net/SSL.pm in @INC (you may need to install the Net::SSL module) (@INC contains: /Library/Perl/5.30/darwin-thread-multi-2level /Library/Perl/5.30 /Network/Library/Perl/5.30/darwin-thread-multi-2level /Network/Library/Perl/5.30 /Library/Perl/Updates/5.30.3/darwin-thread-multi-2level /Library/Perl/Updates/5.30.3 /System/Library/Perl/5.30/darwin-thread-multi-2level /System/Library/Perl/5.30 /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level /System/Library/Perl/Extras/5.30) at davtest.pl line 49. BEGIN failed--compilation aborted at davtest.pl line 49.
尝试用cpan安装Net::SSL模块时,又触发OpenSSL头文件找不到的错误:
openssl-version.c:2:10: fatal error: 'openssl/opensslv.h' file not found #include <openssl/opensslv.h> ^~~~~~~~~~~~~~~~~~~~ 1 error generated. Failed to build and link a simple executable using OpenSSL No 'Makefile' created NANIS/Crypt-SSLeay-0.72.tar.gz /usr/bin/perl Makefile.PL -- NOT OK
解决方案
1. 用Brew安装最新版OpenSSL
系统自带的OpenSSL路径无法被Perl的模块构建工具识别,先通过Brew安装:
brew install openssl
2. 指定OpenSSL路径安装依赖模块
Net::SSL依赖Crypt::SSLeay,需要让cpan找到Brew安装的OpenSSL的头文件和库:
先获取Brew安装的OpenSSL路径:
brew --prefix opensslM系列芯片Mac输出通常是
/opt/homebrew/opt/openssl,Intel芯片是/usr/local/opt/openssl设置环境变量后安装
Crypt::SSLeay:export OPENSSL_PREFIX=$(brew --prefix openssl) export CFLAGS="-I$OPENSSL_PREFIX/include" export LDFLAGS="-L$OPENSSL_PREFIX/lib" cpan Crypt::SSLeay或者用更简洁的
cpanm(未安装的话先执行brew install cpanm):OPENSSL_PREFIX=$(brew --prefix openssl) cpanm Crypt::SSLeay
3. 验证安装
安装完成后,重新运行davtest.pl即可解决模块缺失问题。
内容的提问来源于stack exchange,提问作者Ayman Boulaich

