2015-04-17 3 views
2

Когда я пытался использовать EMCC для компиляции кода C в Javascript, я получил следующее сообщение об ошибке:Как сделать работу emcc?

emcc tests/hello_world.c 
CRITICAL root: fastcomp in use, but LLVM has not been built with the JavaScript backend as a target, llc reports: 
=========================================================================== 
LLVM (http://llvm.org/): 
    LLVM version 3.5.1 
    Optimized build with assertions. 
    Built Feb 22 2015 (00:08:56). 
    Default target: x86_64-apple-darwin13.4.0 
    Host CPU: corei7-avx 

    Registered Targets: 
    x86 - 32-bit X86: Pentium-Pro and above 
    x86-64 - 64-bit X86: EM64T and AMD64 
=========================================================================== 
CRITICAL root: you can fall back to the older (pre-fastcomp) compiler core, although that is not recommended, see https://github.com/kripken/emscripten/wiki/LLVM-Backend 
INFO  root: (Emscripten: Running sanity checks) 
CRITICAL root: failing sanity checks due to previous fastcomp failure 

Как решить эту проблему? Как отменить предварительную компиляцию?

ответ

1

Это похоже на плохо сконфигурированную установку Emscripten. Вы установили с SDK? Похоже, emcc находит неправильный clang (возможно, тот, который вы уже установили, присутствует в вашем PATH до того, как ожидается emcc), а не версия clang, которая обычно поставляется с Emscripten.

В какой ОС вы находитесь?

В Linux проверьте which clang и echo $PATH, чтобы выяснить, какой clang присутствует.

Попробуйте использовать emcc с: EMMAKEN_COMPILER=/path/to/emscripten-fastcomp/bin emcc test/hello.cc Это должно отменить неправильный путь выше.

Также попробуйте вызвать emcc с опцией -v, чтобы получить подробный вывод.

Если ничего не происходит, отправьте вывод этих команд и информацию о том, как воспроизвести проблему.

2

Я решил ту же ошибку, когда я строил Emscripten вручную из источника.

Emscripten использует свою собственную вилку LLVM - Fastcomp; выстроить его из источника, следуя инструкциям here. Затем отредактируйте ~/.emscripten иметь LLVM_ROOT как этот

LLVM_ROOT = os.path.expanduser('/home/yourpath/to/emscripten-fastcomp/build/Release/bin') # directory 

(это может быть даже /home/yourpath/to/emscripten-fastcomp/build/bin)

1

Я опоздал на вечеринку здесь, но для кого-то с той же проблемой (ы).

Работает в Windows 10 с emscripten-fastcomp, созданным с использованием файлов CMake для VS2015. Оба emscripten и emscripten-fastcomp были клонированы из их репозиториев Github.

Документация here либо устарела, либо просто неверна. Для начала попробуйте запустить emcc -v, то есть без любых файлов для компиляции.

R:\src\tools\emscripten>emcc -v 

, который вы должны получить это:

> Welcome to Emscripten! 
> 
> This is the first time any of the Emscripten tools has been run. 
> 
> A settings file has been copied to ~/.emscripten, at absolute path: 
> C:\Users\user/.emscripten 
> 
> It contains our best guesses for the important paths, which are: 
> 
> LLVM_ROOT  = /usr/bin 
> NODE_JS   = R:\apps\nodejs\node.exe 
> EMSCRIPTEN_ROOT = R:\src\tools\emscripten 
> 
> Please edit the file if any of those are incorrect. 
> 
> This command will now exit. When you are done editing those paths, 
> re-run it. 
> 

Теперь редактировать переменную LLVM_ROOT в

C:\Users\user\.emscripten

таким образом, что по умолчанию

LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or '/usr/bin') # directory

изменен на следующее:

LLVM_ROOT = os.path.expanduser(os.getenv('LLVM') or 'R:\\src\\tools\\emscripten-fastcomp\\build\\Debug\\bin') # directory.

Обратите внимание на сбрасываемые обратные косые черты, стандартная одиночная обратная косая черта \ не будет работать.

Теперь вы должны иметь возможность запускать тесты и получить осмысленные результаты, как в

emcc -v tests/hello_world.cpp 

который затем извергает что-то вроде этого:

> R:\src\tools\emscripten>emcc -v tests/hello_world.cpp 
> INFO:root:generating system asset: is_vanilla.txt... (this will be 
> cached in "C:\Users\user\.emscripten_cache\is_vanilla.txt" for 
> subsequent builds) INFO:root: - ok INFO:root:(Emscripten: Running 
> sanity checks) INFO:root:(Emscripten: Running sanity checks) clang 
> version 3.9.0 (https://github.com/kripken/emscripten-fastcomp-clang 
> 60a7e9a9c22b67309e5b1258d38fadfa481a25d3) 
> (https://github.com/kripken/emscripten-fastcomp 
> 881bd352731d21c7117ad7e2ece347aacae83965) (emscripten 1.37.0 : 1.37.0) 
> Target: asmjs-unknown-emscripten Thread model: posix InstalledDir: 
> R:\src\tools\emscripten-fastcomp\build\Debug\bin 
> "R:\\src\\tools\\emscripten-fastcomp\\build\\Debug\\bin\\clang++.exe" 
> -cc1 -triple asmjs-unknown-emscripten -emit-llvm-bc -emit-llvm-uselists -disable-free -main-file-name hello_world.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -no-integrated-as -mconstructor-aliases -v -dwarf-column-info -debugger-tuning=gdb -coverage-file "C:\\Users\\user\\AppData\\Local\\Temp\\tmpk4sar7\\hello_world_0.o" 
> -nostdsysteminc -nobuiltininc -resource-dir "R:\\src\\tools\\emscripten-fastcomp\\build\\Debug\\bin\\..\\lib\\clang\\3.9.0" 
> -D __EMSCRIPTEN_major__=1 -D __EMSCRIPTEN_minor__=37 -D __EMSCRIPTEN_tiny__=0 -D _LIBCPP_ABI_VERSION=2 -Werror=implicit-function-declaration -std=c++03 -fdeprecated-macro -fno-dwarf-directory-asm -fdebug-compilation-dir "R:\\src\\tools\\emscripten" -ferror-limit 19 -fmessage-length 80 
> -fobjc-runtime=gnustep -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -nobuiltininc -nostdsysteminc "-isystemR:\\src\\tools\\emscripten\\system\\include\\libcxx" 
> "-isystemR:\\src\\tools\\emscripten\\system\\lib\\libcxxabi\\include" 
> "-isystemR:\\src\\tools\\emscripten\\system\\include\\compat" 
> "-isystemR:\\src\\tools\\emscripten\\system\\include" 
> "-isystemR:\\src\\tools\\emscripten\\system\\include\\SSE" 
> "-isystemR:\\src\\tools\\emscripten\\system\\include\\libc" 
> "-isystemR:\\src\\tools\\emscripten\\system\\lib\\libc\\musl\\arch\\emscripten" 
> "-isystemR:\\src\\tools\\emscripten\\system\\local\\include" 
> "-isystemR:\\src\\tools\\emscripten\\system\\include\\SDL" -o 
> "C:\\Users\\user\\AppData\\Local\\Temp\\tmpk4sar7\\hello_world_0.o" -x 
> c++ tests/hello_world.cpp clang -cc1 version 3.9.0 based upon LLVM 
> 3.9.0 default target i686-pc-windows-msvc 
> #include "..." search starts here: 
> #include <...> search starts here: R:\src\tools\emscripten\system\include\libcxx 
> R:\src\tools\emscripten\system\lib\libcxxabi\include 
> R:\src\tools\emscripten\system\include\compat 
> R:\src\tools\emscripten\system\include 
> R:\src\tools\emscripten\system\include\SSE 
> R:\src\tools\emscripten\system\include\libc 
> R:\src\tools\emscripten\system\lib\libc\musl\arch\emscripten 
> R:\src\tools\emscripten\system\local\include 
> R:\src\tools\emscripten\system\include\SDL End of search list. 

Надеется, что это спасает кого-то День подарков волосы слезотечение. Удачи.