gcc 没有找到头文件,尽管它的路径已经包含在 -I 中

sun*_*ica 8 cygwin perl gcc cpan

我正在尝试通过 安装模块 ( Package::Stash::XS) cpanm,但由于 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
Run Code Online (Sandbox Code Playgroud)

失败并出现错误:

XS.xs:1:20: fatal error: EXTERN.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

在线:

#line 1 "XS.xs"
#include "EXTERN.h"
Run Code Online (Sandbox Code Playgroud)

但是,该文件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
Run Code Online (Sandbox Code Playgroud)

可能是什么问题,我怎样才能使编译成功?我试过更改-I-iquote(尽管 gcc 手册确实说双引号包括最终也使用 -I),但这无济于事。我的第一个想法是这是一个权限问题,但这是 Cygwin 并且 cpanm 像我一样运行,我确实EXTERN.h对 CORE 目录具有读取访问权限和 exec 访问权限。

小智 13

这是通过安装libcrypt-devel.

然后一切正常……所以问题解决了!

这更好地解释了它:Re:难以编译 Package::Stash::XS


sun*_*ica 8

好的,我相信我已经找到了问题所在。如前所述,我正在 Cygwin 中运行它,而且 Cygwin 似乎试图使用 Windows 草莓 Perl 的 gcc,因为它自己的 gcc 没有安装!Windows gcc 可能在 Cygwin 样式路径方面存在问题,因此出现了奇怪的错误。我现在已经安装了 Cygwin 的 gcc,这个问题就消失了。它接下来抱怨一个<crypt.h>,这也通过libcrypt-devel从 Cygwin 安装对话框安装来解决。

  • 请注意,作为用户阅读“安装一些与 crypt 相关的库”是没有用的。阅读“安装`libcrypt-devel`”很有用 (2认同)
  • @RobHall 感谢您提到图书馆。我一定是这样写的,因为我刚刚出去安装了名称中带有“crypt”的任何东西,并且不知道具体哪个有帮助。 (2认同)