Ich versuche, ein Modul ( Package::Stash::XS
) über zu installieren cpanm
, aber die Installation schlägt aufgrund eines gcc-Fehlers fehl. Der Befehl:
gcc -c -DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -fno-strict-aliasing -pipe -fstack-protector -DUSEIMPORTLIB -O3 -DVERSION=\"0.28\" -DXS_VERSION=\"0.28\" "-I/usr/lib/perl5/5.14/x86_64-cygwin-threads/CORE" XS.c
schlägt mit dem Fehler fehl:
XS.xs:1:20: fatal error: EXTERN.h: No such file or directory
compilation terminated.
an der linie:
#line 1 "XS.xs"
#include "EXTERN.h"
Die Datei ist EXTERN.h
jedoch in folgendem -I
Lieferumfang enthalten /usr/lib/perl5/5.14/x86_64-cygwin-threads/CORE
:
$ ls /usr/lib/perl5/5.14/x86_64-cygwin-threads/CORE/E*
/usr/lib/perl5/5.14/x86_64-cygwin-threads/CORE/EXTERN.h
Was könnte das Problem sein und wie kann ich die Kompilierung zum Erfolg führen? Ich habe versucht, das -I
zu ändern -iquote
(obwohl das GCC-Handbuch sagt, dass doppelte Anführungszeichen auch irgendwann -I verwenden), aber das hilft nicht. Mein erster Gedanke war, dass es sich um ein Berechtigungsproblem handelte, aber dies ist Cygwin und cpanm wird ausgeführt, während ich EXTERN.h
Lesezugriff auf das CORE-Verzeichnis und Exec-Zugriff darauf habe.
Antworten:
Dies wurde durch die Installation behoben
libcrypt-devel
.Dann hat alles prima geklappt ... Also Problem gelöst!
Dies erklärt es besser: Re: Schwieriges Kompilieren von Package :: Stash :: XS
quelle
Ok, ich glaube, ich habe das Problem gefunden. Ich führe dies in Cygwin wie erwähnt aus und es scheint, dass Cygwin versucht hat, Windows-Erdbeer-Perl-Gcc zu verwenden, da es keinen eigenen Gcc installiert hat! Der Windows-GCC hatte wahrscheinlich Probleme mit einem Pfad im Cygwin-Stil, daher der seltsame Fehler. Ich habe jetzt Cygwins gcc installiert und dieses Problem ist weg. Es beschwerte sich als nächstes über eine
<crypt.h>
, die ebenfalls durch die Installationlibcrypt-devel
aus dem Cygwin-Setup-Dialog behoben wurde .quelle
libcrypt-devel
"gcc-g++
Paket musste in meinem Fall (zusammen mitgcc-core
undmake
) installiert werden