cpanm
経由でモジュール(Package::Stash::XS
)をインストールしようとしていますが、gccエラーのためにインストールが失敗します。コマンド:
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
エラーで失敗します:
XS.xs:1:20: fatal error: EXTERN.h: No such file or directory
compilation terminated.
行で:
#line 1 "XS.xs"
#include "EXTERN.h"
ただし、ファイルEXTERN.h
は-I
に含まれる/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
問題は何でしょうか、またコンパイルを成功させるにはどうすればよいですか? -I
を-iquote
に変更しようとしましたが(gccのマニュアルには、二重引用符で囲まれたものにも最終的に-Iが使用されると記載されています)、それは役に立ちません。私が最初に思ったのは権限の問題ですが、これはCygwinであり、cpanmは私と同じように実行されており、私はEXTERN.h
への読み取りアクセス権とCOREディレクトリへのexecアクセス権を持っています。
わかりました。問題を見つけたと思います。前述のように、これをCygwinで実行していますが、Cygwinは独自のgccがインストールされていないため、Windows新たなPerlのgccを使用しようとしていたようです。 Windows gccにはおそらくCygwinスタイルのパスに問題があったため、奇妙なエラーが発生しました。 Cygwinのgccをインストールしたので、この問題はなくなりました。次に、<crypt.h>
について不平を言いましたが、Cygwinセットアップダイアログからlibcrypt-devel
をインストールすることで解決しました。
これは、libcrypt-devel
をインストールすることで修正されました。
その後、すべてが正常に機能しました...問題は解決しました!
これはそれをよりよく説明します: Re:Package :: Stash :: XSのコンパイルが難しい