Ho riscontrato un problema durante il tentativo di installare moduli con CPAN (e con make
manuale). Ho installato perl tramite Homebrew e quando eseguo cpan install MODULE_NAME
ottengo questo errore:
ld: warning: directory not found for option '-
L/System/Library/Perl/5.26.1/darwin-thread-multi-2level/CORE'
ld: library not found for -lperl
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
make[1]: *** [../blib/arch/auto/Verilog/Parser/Parser.bundle] Error 1
make: *** [subdirs] Error 2
WSNYDER/Verilog-Perl-3.448.tar.gz
/usr/bin/make -- NOT OK
So che questo problema è dovuto alla mia versione Perl poiché la mia versione Perl nella seguente posizione è la 5.18 e non la 5.26 (vedi: /System/Library/Perl/5.26.1/darwin-thread-multi-2level/CORE
).
Qualsiasi aiuto sarebbe molto apprezzato.
Modifica
Sono forniti i seguenti output:
$ type cpan
cpan is /usr/local/bin/cpan
$ type make
make is /usr/bin/make
$ where brew
/usr/local/bin/brew
$ echo $PATH
/Users/alexandermann/.nvm/versions/node/v8.9.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/alexandermann/Library/Python/3.6/bin:/Users/alexandermann/Library/Android/sdk/tools:/Users/alexandermann/Library/Android/sdk/platform-tools
La prima riga in /usr/local/bin/perl
è: #!/usr/local/opt/perl/bin/perl
Modifica 2:
Quindi ho trovato un altro indizio per risolvere questo ... Ho provato a installare manualmente un pacchetto Perl (il pacchetto è Verilog-Perl ). Seguendo il setup tipico per ottenere un Makefile
devo eseguire perl Makefile.PL
nella directory root del pacchetto. Guardando in Makefile.PL
trovo:
$out .= "DLEXT = dylib\n";
if ($^V eq '5.16.2') {
$out .= sprintf("LDDLFLAGS = -dynamiclib -lstdc++ -L/System/Library/Perl/5.16.2/%s/CORE -lperl -L/usr/local/lib\n",$Config{archname});
} elsif ($^V eq '5.12.4') {
$out .= sprintf("LDDLFLAGS = -dynamiclib -lstdc++ -L/System/Library/Perl/5.12/%s/CORE -lperl -L/usr/local/lib\n",$Config{archname});
} elsif ($^V eq '5.18.2') {
$out .= sprintf("LDDLFLAGS = -dynamiclib -lstdc++ -L/System/Library/Perl/5.18/%s/CORE -lperl -L/usr/local/lib\n",$Config{archname});
} else {
$out .= sprintf("LDDLFLAGS = -dynamiclib -lstdc++ -L/System/Library/Perl/%vd/%s/CORE -lperl -lgcc_eh -L/usr/local/lib\n",$^V,$Config{archname});
}
Puoi vedere che -L/System/Library/Perl...
è hardcoded in Makefile.PL
. La mia versione perl Mac è 5.18
ma poiché la mia versione Homebrew Perl è 5.26
, sta cercando -L/System/Library/Perl/5.26/
quando in realtà questo risiede nella mia cantina di Homebrew. A questo punto, non sono sicuro che ci sia una soluzione conveniente ...