[英]How to install Perl on macOS 10.13 High Sierra
我最近升級到macOS 10.13 High Sierra,並在嘗試安裝更新版本的Perl(5.26.1)后遇到問題。 問題的關鍵在於cpan/DB_File
的自檢在macOS 10.13 High Sierra(家用筆記本電腦)上始終失敗,但在macOS 10.12 Sierra(工作筆記本電腦)上取得了成功。
以下是顯示失敗的安裝日志部分:
../cpan/Config-Perl-V/t/30_plv5240.t ............................... ok
../cpan/Config-Perl-V/t/31_plv52511.t .............................. ok
../cpan/DB_File/t/db-btree.t ....................................... ok
Use of uninitialized value $value in string eq at t/db-hash.t line 224.
Use of uninitialized value $values[0] in string eq at t/db-hash.t line 224.
Use of uninitialized value $value in lc at t/db-hash.t line 224.
Use of uninitialized value $h{""} in string eq at t/db-hash.t line 243.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value in numeric eq (==) at t/db-hash.t line 252.
Use of uninitialized value $foo[18] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[36] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[48] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[58] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[59] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[60] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[62] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[63] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[92] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[114] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[140] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[187] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[188] in join or string at t/db-hash.t line 261.
Use of uninitialized value $foo[189] in join or string at t/db-hash.t line 261.
Use of uninitialized value $h{"Fred"} in string eq at t/db-hash.t line 572.
Use of uninitialized value $v in concatenation (.) or string at t/db-hash.t line 748.
../cpan/DB_File/t/db-hash.t ........................................
Dubious, test returned 2 (wstat 512, 0x200)
Failed 76/166 subtests
無論是使用perlbrew install perl-5.26.1
還是只是下載Perl tarfile並手動安裝,我都能重復同樣的失敗。 當我嘗試調試有問題的測試t/db-hash.t
,我可以看到測試哈希%h
已創建並正在測試文件中填充,但是當我print Dumper(\\%h)
我看到了散列看起來具有正確的鍵,但所有值都是undef
,而不是測試腳本中分配的值。
這些undef
值導致測試失敗。 奇怪的是,當我打印整個哈希或嘗試創建哈希值數組時,會顯示未定義的值。 如果我要求特定的哈希鍵的值,例如my $value = $h{key}
,則該值打印正常。
問題:
這是有效的:
安裝Berkeley DB。 我使用Homebrew ,但您可以在Oracle站點獲取源文件。
brew install berkeley-db
安裝Perl。 我使用Perlbrew ,但您可以在Perl站點獲取源文件。
perlbrew install perl-5.26.1
回顧失敗的安裝日志, DB_File
部分附近有一條警告,提供了一個線索:
...
./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic
Parsing config.in...
Looks Good.
Warning (mostly harmless): No library found for -ldb
Generating a Unix-style Makefile
Writing Makefile for DB_File
...
沒有找到db
庫, 大多數都是無害的。
根據DB_File
模塊的文檔,它是......
...一個允許Perl程序使用Berkeley DB提供的工具的模塊......
安裝berkeley-db
,Perl安裝日志的相同部分不再顯示相同的警告:
...
./miniperl -Ilib make_ext.pl lib/auto/DB_File/DB_File.bundle MAKE="/Applications/Xcode.app/Contents/Developer/usr/bin/make" LIBPERL_A=libperl.a LINKTYPE=dynamic
Parsing config.in...
Looks Good.
Generating a Unix-style Makefile
Writing Makefile for DB_File
...
在此過程中,先前失敗的測試通過,允許安裝成功完成:
...
../cpan/DB_File/t/db-btree.t ....................................... ok
../cpan/DB_File/t/db-hash.t ........................................ ok
../cpan/DB_File/t/db-recno.t ....................................... ok
...
我無法在網上找到任何關於為什么Berkeley DB似乎從macOS 10.13 High Sierra中丟失的文檔,以及這是否與以前的macOS版本相比有所改變。
非常感謝Tim D幫助我排除故障。
要安裝perl本身(包含DB_File模塊),或者從CPAN安裝DB_File模塊,解決方案是相同的:編輯其config.in
以指向berkeley-db的正確位置。
例如,我已經通過macports使用sudo port install db48
安裝了db48軟件包。 在perl下載本身,我導航到cpan / DB_File並編輯其config.in
,從而改變現有的INCLUDE和LIB分配:
INCLUDE = /opt/local/include/db48
LIB = /opt/local/lib/db48
然后我可以恢復perl構建過程並且DB_File可以編譯。
參考文獻:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.