
很久以前,我用 C++ 編寫了一個非常粗糙和原始的 shell,而且我最近才發現 asm.js,所以我認為嘗試在瀏覽器中編譯並運行它會很不錯,但我不能,因為apt 軟體包不相容。我安裝了 llvm、clang 和 emscripten 軟體包,它們都與儲存庫中的內容保持同步。這是我的測試文件hello.c
:
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
這可以編譯並運行得很好clang hello.c && ./a.out
,但是當我運行時emcc hello.c
出現錯誤
/usr/bin/lli: error creating EE: No available targets are compatible with this triple, see -version for the available targets. FAIL: Running the generated program failed!
哪個做generate a.out.js
,但它只包含對 SourceMap 的第一行引用a.out.js.map
(映射本身只包含行:{"version":3,"file":"a.out.js","sources":[],"names":[],"mappings":""}
。現在我認為這意味著 llvm 不是用 編譯的-targets=all
,或者至少沒有js
目標,所以我嘗試構建它我從源代碼中獲取了最新的軟體包,並嚴格遵循概述的步驟。這裡和這裡,並且兩個包均已成功建置。然而,當像這樣運行時,emiscript 抱怨它“期望 3.4”,但得到“(tags/RELEASE_380/final)”版本信息,隨後失敗。為了安全起見,在開始原始碼建置之前我已經 apt-purged emscripten、llvm 和 clang,我希望 3.4 是最低限度版本,而不是僅支援版本,因為我相信最新版本是 3.9,並且文件沒有說要考慮任何特殊考慮。不管怎樣,我嘗試從原始程式碼建立 3.4,但顯然它不能將“js”識別為有效目標(我嘗試在沒有該目標的情況下建立並運行它:沒有骰子)。對我來說很奇怪的是emscripten
apt-package 沒有引入正確編譯的 clang/llvm 作為依賴項,所以我可能調用錯誤了?文件說我應該能夠做我正在做的事情,但我是 clang/emscripten 的新手,所以也許我必須先設定 clang 環境,或明確連結某些東西?
系統資訊
clang/clang++ 版本和資訊(來自clang --version
):
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Target: i686-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
llvm版本和資訊(來自lli --version
):
LLVM version 3.8.0
Optimized build.
Built Jul 9 2016 (11:22:59).
Default target: i686-pc-linux-gnu
Host CPU: broadwell
emscripten 版本(取自emcc --version
):1.22.1
最近產生的內容~/.emscripten_sanity
:1.22.1|le32-unknown-nacl|/usr/bin|(tags/RELEASE_380/final)
內核資訊(來自uname -srpmio
):Linux 4.4.0-21-generic i686 i686 i686 GNU/Linux
系統是一個安裝了擴充功能的 VirtualBox VM,運行 Linux Mint 18「Sarah」Cinnamon 作為 32 位元機器,具有 2 個 CPU 核心、4GB RAM、512mb 視訊記憶體和 ~50GB 虛擬磁碟映像。不存在其他作業系統,基本上是普通安裝。目前 apt 儲存庫提供了 clang、llvm 和 emscripten 的預設版本。