Linux找不到存在的文件

我试图让Google的Dart语言启动并运行,但运行dart2js时出错。 我正在运行Arch linux,并安装了AUR的dart-sdk 。 下面有一些相关的terminal输出。

% 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 

难道是因为我正在运行一个64位的操作系统和镖二进制是32位?

为了执行一个ELF二进制文件,linux需要启动一个解码ELF的程序,加载dynamic库等。这个程序被称为程序解释器 。 程序解释器的名称和完整path被写入ELF本身

例如

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

如果ELF请求的程序解释器没有find,BASH得到找不到的文件错误,并报告“没有这样的文件或目录”。

正如@poige上面所说,您需要安装对运行32位应用程序的基本支持。

是的,默认情况下,Arch x86_64不支持32位应用程序。 看到这个:

«… 我可以在Arch64中运行32位应用吗? […]您可以从multilib存储库安装lib32- *库…»