web-dev-qa-db-ja.com

パスが-Iに含まれているにもかかわらず、gccがヘッダーファイルを見つけられない

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のコンパイルが難しい

14
TuAmigo