/ bin / sh: ./check-dependencies.pl: não encontrado - mas existe check-dependencies.pl!

0

Estou tentando criar Moses , mas quando executo make , obtenho a seguinte saída:

minakshi@minakshi-Vostro-3500:~/Desktop/working-dir/moses/scripts$ make release
# Compile the parts
make all
make[1]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts'
# Building memscore may fail e.g. if boost is not available.
# We ignore this because traditional scoring will still work and memscore isn't used by default.
cd training/memscore ; \
      ./configure && make \
      || ( echo "WARNING: Building memscore failed."; \
           echo 'training/memscore/memscore' >> ../../release-exclude )
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for boostlib >= 1.31.0... yes
checking for cos in -lm... yes
checking for gzopen in -lz... yes
checking for cblas_dgemm in -lgslcblas... no
checking for gsl_blas_dgemm in -lgsl... no
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking n_gram.h usability... no
checking n_gram.h presence... no
checking for n_gram.h... no
checking for size_t... yes
checking for ptrdiff_t... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make  all-am
make[3]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make[3]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
touch release-exclude # No files excluded by default
pwd='pwd'; \
    for subdir in cmert-0.5 phrase-extract symal mbr lexical-reordering; do \
      make -C training/$subdir || exit 1; \
      echo "### Compiler $subdir"; \
      cd $pwd; \
    done
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/cmert-0.5'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/cmert-0.5'
### Compiler cmert-0.5
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/phrase-extract'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/phrase-extract'
### Compiler phrase-extract
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/symal'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/symal'
### Compiler symal
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/mbr'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/mbr'
### Compiler mbr
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/lexical-reordering'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/lexical-reordering'
### Compiler lexical-reordering
## All files that need compilation were compiled
make[1]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts'
/bin/sh: ./check-dependencies.pl: Permission denied
make: *** [release] Error 126
minakshi@minakshi-Vostro-3500:~/Desktop/working-dir/moses/scripts$ make release
# Compile the parts
make all
make[1]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts'
# Building memscore may fail e.g. if boost is not available.
# We ignore this because traditional scoring will still work and memscore isn't used by default.
cd training/memscore ; \
      ./configure && make \
      || ( echo "WARNING: Building memscore failed."; \
           echo 'training/memscore/memscore' >> ../../release-exclude )
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for boostlib >= 1.31.0... yes
checking for cos in -lm... yes
checking for gzopen in -lz... yes
checking for cblas_dgemm in -lgslcblas... no
checking for gsl_blas_dgemm in -lgsl... no
checking how to run the C++ preprocessor... g++ -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking n_gram.h usability... no
checking n_gram.h presence... no
checking for n_gram.h... no
checking for size_t... yes
checking for ptrdiff_t... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make  all-am
make[3]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make[3]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/memscore'
touch release-exclude # No files excluded by default
pwd='pwd'; \
    for subdir in cmert-0.5 phrase-extract symal mbr lexical-reordering; do \
      make -C training/$subdir || exit 1; \
      echo "### Compiler $subdir"; \
      cd $pwd; \
    done
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/cmert-0.5'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/cmert-0.5'
### Compiler cmert-0.5
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/phrase-extract'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/phrase-extract'
### Compiler phrase-extract
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/symal'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/symal'
### Compiler symal
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/mbr'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/mbr'
### Compiler mbr
make[2]: Entering directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/lexical-reordering'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts/training/lexical-reordering'
### Compiler lexical-reordering
## All files that need compilation were compiled
make[1]: Leaving directory '/home/minakshi/Desktop/working-dir/moses/scripts'
/bin/sh: ./check-dependencies.pl: not found
make: *** [release] Error 127

A mensagem de erro diz ./check-dependencies.pl is "not found", mas vejo o arquivo presente na pasta scripts . Então, por que esse erro ocorre?

    
por jenn 28.10.2012 / 12:13

1 resposta

3

O motivo mais provável para esse erro é que check-dependencies.pl não está no diretório em que o makefile procura. No entanto, se o arquivo check-dependencies.pl existir em /home/minakshi/Desktop/working-dir/moses/scripts , existe outra possibilidade: talvez seu carregador não exista.

Quando o kernel é instruído a executar um programa, ele executa o programa do carregador e passa o executável ao carregamento. Se o loader não for encontrado, o kernel só pode reportar “not found”, ele não tem como distinguir “arquivo solicitado diretamente não encontrado” de “loader not found”. Às vezes, o shell de execução faz uma segunda verificação para exibir uma mensagem de erro mais explícita, mas às vezes você acaba com uma mensagem de aparência estranha que informa que um script ou um executável vinculado dinamicamente não foi encontrado ou não executável. arquivo existe e é executável, mas o erro se aplica ao seu carregador.

Com uma extensão .pl , check-dependencies.pl é presumivelmente um script Perl. Provavelmente começa com uma linha como #!/usr/local/bin/perl , que não fornece o caminho para o interpretador perl em seu sistema. Edite o script e corrija a primeira linha; provavelmente você terá que substituir #!/usr/local/bin/perl por #!/usr/bin/perl ou vice-versa.

O Perl geralmente está localizado em /usr/bin no Linux, mas em /usr/local/bin em muitos outros unices. Existe uma maneira de escrever a linha shebang sem saber o caminho para o interpretador antecipadamente: #!/usr/bin/env perl . A linha shebang requer um caminho absoluto; aqui o interpretador é env , que procura perl no $PATH . No entanto, isso só funciona se não houver argumentos para passar para o interpretador: muitos sistemas, incluindo o Linux, aceitam um único argumento na linha de comando, portanto, por exemplo, #!/usr/bin/perl -T funciona e #!/usr/bin/env perl funciona, mas #!/usr/bin/env perl -T falha porque tenta executar um programa chamado perl -T .

    
por 29.10.2012 / 01:18