在Ubuntu 16.10上使用“错误:没有可用的目标与此三重兼容”将C程序编译到WebAssembly程序


this tutorial之后,我尝试使用以下命令将C程序编译为WebAssembly.

emcc hello.c -s WASM=1 -o hello.html

但我知道“没有可用的目标与这个三联系兼容”.问题.

$emcc hello.c -s WASM=1 -o hello.html
WARNING  root: LLVM version appears incorrect (seeing "(https://github.com/kripken/emscripten-fastcomp-clang/", expected "3.4")
INFO     root: (Emscripten: Running sanity checks)
WARNING  root: Assigning a non-existent settings attribute "WASM"
WARNING  root:  - did you mean one of ASM_JS?
WARNING  root:  - perhaps a typo in emcc's  -s X=Y  notation?
WARNING  root:  - (see src/settings.js for valid values)
/home/casper/Desktop/test/emsdk/clang/fastcomp/build_incoming_64/bin/lli: error creating EE: No available targets are compatible with this triple.
FAIL: Running the generated program failed!

怎么解决?

EMCC版本

$emcc --version
emcc (Emscripten GCC-like replacement) 1.22.1 ()
Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt)
This is free and open source software under the MIT license.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

基本信息

OS           : Ubuntu 16.10
emcc Location: /usr/bin/emcc

最佳答案 在WebAssembly启动之前,您正在运行emcc版本1.22.1,其中
dates back from 8/7/2014.

你所遵循的指令中的emsdk必须安装了一个非常新的emscripten版本(这是这些指令的sdk-incoming-64bit:传入是最新的分支),但在你的系统中找到了一个较旧的emscripten.

跑:

which emcc
echo $PATH

他们说什么?我怀疑你有一个旧的emscripten躺在那里.您可能还想检查和/或删除您的~/.emscripten file,其中可能还包含过时的信息.

您可以使用其绝对路径更改路径,删除旧的emscripten或调用SDK的emscripten(尽管如果其他脚本沿路径选择旧版本,这可能会失败).

不要忘记(从教程的说明中)激活您安装的SDK:

./emsdk activate --build=Release sdk-incoming-64bit binaryen-master-64bit

并运行:

source ./emsdk_env.sh

需要为每个shell会话运行最后一个命令.如果您打开一个新shell,则需要重新获取SDK.

点赞