Linux kann keine vorhandene Datei finden

9

Ich versuche, die Dart-Sprache von Google zum Laufen zu bringen, aber beim Ausführen von dart2js treten Fehler auf. Ich verwende Arch Linux und habe dart-sdk von AUR installiert . Einige relevante Terminalausgänge liegen unten.

% 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

Könnte es sein, dass ich ein 64-Bit-Betriebssystem verwende und die Dart-Binärdatei 32-Bit ist?

Joe
quelle

Antworten:

19

Um eine ELF-Binärdatei auszuführen, muss ein Programm gestartet werden, das ELF decodiert, dynamische Bibliotheken lädt usw. Dieses Programm wird als Programminterpreter bezeichnet . Der Name und der vollständige Pfad zum Programminterpreter sind in der ELF selbst geschrieben

Zum Beispiel

 $ 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]
 ...

Wenn der vom ELF angeforderte Programminterpreter nicht gefunden wird, erhält BASH den Fehler "Datei nicht gefunden" und meldet "Keine solche Datei oder kein solches Verzeichnis".

Wie oben bereits erwähnt, müssen Sie die grundlegende Unterstützung für die Ausführung von 32-Bit-Anwendungen installieren.

Dmitri Chubarov
quelle
4

Ja, Arch x86_64 wird standardmäßig nicht mit 32-Bit-Apps unterstützt. Sieh dir das an:

«… Kann ich 32-Bit-Apps in Arch64 ausführen? […] Sie können lib32- * Bibliotheken aus dem Multilib-Repository installieren… »

poige
quelle