gcc findet Header-Datei nicht, obwohl der Pfad in -I enthalten ist

8

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.hjedoch in folgendem -ILieferumfang 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 -Izu ä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.hLesezugriff auf das CORE-Verzeichnis und Exec-Zugriff darauf habe.

Sundar
quelle
Ich vermute, gcc ruft ein anderes Programm auf und übergibt die -I-Parameter nicht an sie ...
golimar

Antworten:

8

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 Installation libcrypt-develaus dem Cygwin-Setup-Dialog behoben wurde .

Sundar
quelle
2
Beachten Sie, dass das Lesen von "Installieren einiger Verschlüsselungsbibliotheken" für einen Benutzer nicht hilfreich ist. Es ist nützlich zu lesen "Installation libcrypt-devel"
Rob Hall
2
@RobHall Danke, dass du die Bibliothek erwähnt hast. Ich muss es so geschrieben haben, weil ich gerade ausgegangen bin und installiert habe, was auch immer "Krypta" im Namen hatte, und nicht genau wusste, welche half.
Sundar
Cygwins- gcc-g++Paket musste in meinem Fall (zusammen mit gcc-coreund make) installiert werden
Kjetil S.