2017-08-10 11 views
1

私はウェブアセンブリの指示(http://webassembly.org/getting-started/developers-guide/)に従ってemsdkをインストールしようとしています。それはすべてOSX上で正常にコンパイルが、私はUbuntuの16.04でそれを構築しようとしているとき、私は次のようなエラーに実行しているよ:Ubuntuでemsdkをビルドしようとしたときにエラーが発生しました16.04

[ 94%] Built target llvm-lto2 
[ 94%] Built target llvm-diff 
[ 94%] Linking CXX executable ../../bin/llvm-c-test 
collect2: error: ld returned 1 exit status 
tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/build.make:425: recipe for target 'bin/llvm-c-test' failed 
make[2]: *** [bin/llvm-c-test] Error 1 
CMakeFiles/Makefile2:15474: recipe for target 'tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/all' failed 
make[1]: *** [tools/llvm-c-test/CMakeFiles/llvm-c-test.dir/all] Error 2 
Makefile:149: recipe for target 'all' failed 
make: *** [all] Error 2 
Build failed due to exception! 
Working directory: /opt/emsdk/clang/fastcomp/build_incoming_64 
Command '['make', '-j1']' returned non-zero exit status 2 
Installation failed! 

誰もが何が起こっているか知っていますか?

答えて

0

emsdkをビルドするときの主な問題は、インストールスクリプトが4つの論理プロセッサコアを検出して3スレッドコンパイルを開始するように見えるためです。すべてがコンパイルされると、複数のリンカープロセス(ld)が同時に起動しているように見えます。少なくとも8GBのRAMを使い果たしてしまいます(少なくともタブが多いFirefoxが同時に動作している場合)。システムが応答しなくなり、使用を中止してldプロセスの1つを待つか終了する必要があります。私の場合、他の2つはリンクを終了しますが、インストールは失敗しますが、再実行するとリンクするバイナリが2つ少なくなります:) 。

私は

$ ulimit -v 2000000 
$ ./emsdk install sdk-incoming-64bit 

とスワップすることなく、メモリの枯渇をシミュレートしようとしましたが、同じエラーcollect2: error: ld returned 1 exit statusを得たが、それ以前に/usr/bin/ld: failed to set dynamic section sizes: Memory exhaustedのようなものとしています。

私は(あなたがどんなMemory exhaustedメッセージを持っていない、あなたはシングルスレッドのコンパイル(make -j1)を実行している、特にので)あなたは正確にこの問題を持って完全にわからないんだけど、おそらくldときに、メモリ内の他の障害シナリオがあるかもしれません疲れた。空きメモリ+ buff/cacheがほぼ0(の場合、のほとんどが0になる可能性があります)になるかどうかを調べるときに、もう一方の端末のtop出力を確認しながらインストールを再実行できます。その場合は、スワップパーティションまたはファイルを使用することができます。残念ながら、すでに単一スレッドのコンパイル(make -j1)しか持っていないので、ldプロセスの1つを終了するトリックを使用することはできません。

+0

ありがとうございます!それは完全な説明です! :)私はウェブアセンブリの人に直接助けを求めることでこれを解決することもできました:https://github.com/WebAssembly/website/issues/103 –

関連する問題