我正在尝试启动并运行 Google 的 Dart 语言,但在运行 dart2js 时出错。我正在运行 Arch linux 并从 AUR安装了dart-sdk 。下面是一些相关的终端输出。
% 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 位操作系统,而 dart 二进制文件是 32 位的吗?
为了执行 ELF 二进制文件,linux 需要启动一个程序来解码 ELF、加载动态库等。这个程序称为程序解释器。程序解释器的名称和完整路径写在 ELF 本身中
例如
如果没有找到 ELF 请求的程序解释器,BASH 会收到文件未找到错误并报告“没有这样的文件或目录”。
正如@poige 上面所说,您需要安装运行 32 位应用程序的基本支持。
是的,Arch x86_64 默认不支持 32 位应用程序。看到这个:
«...我可以在 Arch64 中运行 32 位应用程序吗?[…] 您可以从 multilib 存储库安装 lib32-* 库…»