GNU Make永远找不到perl?

GNU Make永远找不到perl?,perl,makefile,compilation,arm,gnu-make,Perl,Makefile,Compilation,Arm,Gnu Make,编译程序时,有时会出现以下错误: make[1]: /usr/bin/perl: Command not found make[1]: *** [links] Error 127 任何需要perl编译的程序都会发生这种情况,例如openssl和automake。然而: sh-2.05b# perl -v This is perl, v5.10.0 DEVEL34342 built for arm-linux-thread-multi (with 1 registered patch, see

编译程序时,有时会出现以下错误:

make[1]: /usr/bin/perl: Command not found
make[1]: *** [links] Error 127
任何需要perl编译的程序都会发生这种情况,例如openssl和automake。然而:

sh-2.05b# perl -v

This is perl, v5.10.0 DEVEL34342 built for arm-linux-thread-multi
(with 1 registered patch, see perl -V for more detail)

sh-2.05b# /usr/bin/perl -v

This is perl, v5.10.0 DEVEL34342 built for arm-linux-thread-multi
(with 1 registered patch, see perl -V for more detail)

我肯定安装了perl。发生了什么?

如果这是可复制的,请使用
strace-f
运行
make
命令,以清楚地查看哪个命令正在尝试执行(或失败)

根据我自己的经验,我可以回忆起以下两种情况:
exec
-系列可能会在使用
enoint
的Linux上失败,尽管命令确实存在:

  • 二进制文件引用的
    .interp
    不存在(例如:LSB兼容二进制文件引用的是
    /lib/ld LSB.so.3
    ,而不是通常的
    /lib/ld linux.so.2
    ,并且linux计算机上尚未安装LSB兼容包)。在您的场景中似乎不太可能:)
  • 一些内核级别的非标准安全机制已经到位,它阻止了二进制文件的执行,特别是在锁定的嵌入式设备上。在这种情况下,
    EACCES
    可能是更符合逻辑的errno,但可能使用
    enoint
    来防止将有关二进制文件存在的信息泄漏给非特权进程

  • 如果这是可复制的,请使用
    strace-f
    运行
    make
    命令,以明确查看哪个命令正在尝试执行(并且失败)

    根据我自己的经验,我可以回忆起以下两种情况:
    exec
    -系列可能会在使用
    enoint
    的Linux上失败,尽管命令确实存在:

  • 二进制文件引用的
    .interp
    不存在(例如:LSB兼容二进制文件引用的是
    /lib/ld LSB.so.3
    ,而不是通常的
    /lib/ld linux.so.2
    ,并且linux计算机上尚未安装LSB兼容包)。在您的场景中似乎不太可能:)
  • 一些内核级别的非标准安全机制已经到位,它阻止了二进制文件的执行,特别是在锁定的嵌入式设备上。在这种情况下,
    EACCES
    可能是更符合逻辑的errno,但可能使用
    enoint
    来防止将有关二进制文件存在的信息泄漏给非特权进程

  • 您在什么样的系统上开发脚本(以及生成文件)?实际文件最初是否来自Windows系统?这消除了一种可能性(由于文件未经转换就从其他操作系统导入,因此在/usr/bin/perl定义末尾有一个不可见的^M)。这很奇怪。你能告诉我们makefile规则吗?(注意,它是递归调用的。)我的第一个猜测是Perl安装在/usr/bin以外的地方。试着在命令行中输入'which perl'或'typeperl'来找出perl的安装位置。由于某些原因,如果被另一个脚本调用,它将找不到perl。您在什么样的系统上开发了该脚本(以及make文件)?实际文件最初是否来自Windows系统?这消除了一种可能性(由于文件未经转换就从其他操作系统导入,因此在/usr/bin/perl定义末尾有一个不可见的^M)。这很奇怪。你能告诉我们makefile规则吗?(注意,它是递归调用的。)我的第一个猜测是Perl安装在/usr/bin以外的地方。试着在命令行中输入'which perl'或'typeperl'来找出perl的安装位置。由于某些原因,如果由另一个脚本调用,它将找不到perl。