Question Linux ne peut pas trouver le fichier qui existe


J'essaie de faire fonctionner le langage Dart de Google, mais il commet une erreur lors de l'exécution de dart2js. J'exécute Arch linux et j'ai installé dart-sdk de AUR. Quelques sorties de terminal pertinentes se trouvent ci-dessous.

% dart2js main.dart   
/usr/local/bin/dart2js: line 7: /usr/local/bin/dart: No such file or directory

% cat /usr/local/bin/dart2js
#!/bin/sh
# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

BIN_DIR=`dirname $0`
exec $BIN_DIR/dart --allow_string_plus=false $BIN_DIR/../lib/dart2js/lib/compiler/implementation/dart2js.dart "$@"

% file /usr/local/bin/dart                                                                                          
/usr/local/bin/dart: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.15,
BuildID[sha1]=0x27fe166ca015c1adfeaf3a6f9c018e7d7af46d9f, stripped

% ls -alh /usr/local/bin
total 4.9M
drwxr-xr-x  2 root root 4.0K Jun 10 22:51 .
drwxr-xr-x 12 root root 4.0K Jun 10 22:51 ..
-rwxr-xr-x  1 root root 422K May 10 22:41 cargo
-rwxr-xr-x  1 root root 2.7M Jun 10 22:50 dart
-rwxr-xr-x  1 root root  360 Jun  6 16:20 dart2js
-rwxr-xr-x  1 root root  176 Jun  6 16:20 pub
-rwxr-xr-x  1 root root 166K May 10 22:41 rustc
-rwxr-xr-x  1 root root 1.6M May 10 22:41 rustdoc

% uname -rm
3.3.7-1-ARCH x86_64

Cela pourrait-il être dû au fait que j'utilise un système d'exploitation 64 bits et que le binaire de la fléchette est 32 bits?


9
2018-06-11 03:14


origine




Réponses:


Pour exécuter un binaire ELF, Linux doit démarrer un programme qui décode ELF, charge des bibliothèques dynamiques, etc. Ce programme est appelé interprète de programme. Le nom et le chemin complet de l’interprète de programme sont écrits dans le fichier ELF lui-même.

Par exemple

 $ file /usr/bin/cheese 
 /usr/bin/cheese: ELF 32-bit LSB executable, Intel 80386

 $ readelf -l /usr/bin/cheese  
 Elf file type is EXEC (Executable file)
 ...
 Program Headers:
 ...
 INTERP         0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1
  [Requesting program interpreter: /lib/ld-linux.so.2]
 ...

Si l'interpréteur de programme demandé par le fichier ELF est introuvable, BASH obtient l'erreur relative au fichier introuvable et indique "Aucun fichier ou répertoire de ce type".

Comme @poige l'a mentionné ci-dessus, vous devez installer le support de base pour exécuter des applications 32 bits.


19
2018-06-11 03:42





Oui, Arch x86_64 ne prend pas en charge les applications 32 bits par défaut. Regarde ça:

«… Puis-je exécuter des applications 32 bits dans Arch64? […] Vous pouvez installer les bibliothèques lib32- * à partir du référentiel multilib… »


4
2018-06-11 03:30