Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compiling C Program to WebAssembly Program with "Error: No available targets are compatible with this triple" on Ubuntu 16.10

Following this tutorial, I tried to compile a C program to WebAssembly by using the following command.

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

But I ecounter the "No available targets are compatible with this triple." problem.

$ 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!

How to solve it?



EMCC Version

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


Basic Information

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


like image 751
Casper Avatar asked Mar 09 '17 16:03

Casper


1 Answers

You're running emcc version 1.22.1 which dates back from 8/7/2014, before WebAssembly was started.

emsdk in the instruction you followed must have installed a very recent emscripten version (this is what sdk-incoming-64bit from these instructions does: incoming is the latest branch), but an older emscripten is found in your system.

Run:

which emcc
echo $PATH

What do they say? I suspect you have an old emscripten lying in there. You probably also want to check and/or delete your ~/.emscripten file which may also contain obsolete information.

You can alter your path, delete the older emscripten, or invoke the SDK's emscripten using its absolute path (though this may fail later if other scripts pick up older versions along the path).

Don't forget (from the tutorial's instructions) to activate the SDK you've installed:

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

And run:

source ./emsdk_env.sh

This last command needs to be run for every shell session. If you open a new shell you need to re-source then SDK.

like image 154
JF Bastien Avatar answered Oct 20 '22 23:10

JF Bastien