[英]Bad results with Emscripten compiling C++ to JavaScript & Asm.js
對於大學的課程,我必須演示asm.js。 我發現了一個教程( http://www.sitepoint.com/understanding-asm-js/ ),而這正是我想要的。 因此,我創建了給定的C ++文件並使用Emscripten對其進行了編譯。 結果是將近10000行的文件。 無處可找到“使用asm”語句。 與手寫JavaScript文件相比,它要慢得多。
我正在使用便攜式Emscripten-SDK軟件包,並在使用前對其進行了更新。
我如何獲得Emscripten生成良好的asm代碼?
更新:在沒有Emscipten的情況下,我為演示找到了另一種解決方案: https ://gist.github.com/dherman/3d0b4733303eaf4bae5e。 也許有人需要這個。
考慮到它必須包含相當於系統庫(libc等)的功能,因此10k行的javascript是相當適度的,當您執行c ++編譯的源代碼時,這些庫作為單獨的文件存在-當瀏覽器執行javascript的沙箱且無法訪問上的此類系統庫時例如,目標計算機(由於安全性,操作系統中立性等原因)只需對某些動態鏈接的c / c ++可執行文件執行ldd命令,即可了解這10,000行javascript替換中的大部分內容:
ldd /bin/ls
linux-vdso.so.1 => (0x00007fff8c865000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f7b82854000)
libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f7b8264b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7b82285000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7b82018000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7b81e14000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7b82aba000)
libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f7b81c0e000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7b819f0000)
這可能會為您提供有關使用asm.js和emscripten的更多提示: https ://hacks.mozilla.org/2014/11/porting-to-emscripten/
從我的測試來看,Emscripten似乎只使用asm.js,並輸入"use asm";
進入優化級別為-O1
及更高級別的生成的Javascript。 因此,在編譯時,您需要將-O1
(或高於1
級別)傳遞給編譯器:
eemcc source.cpp -O1 -o target.js`
如果您未指定優化級別,或通過-O0
:
eemcc source.cpp -O0 -o target.js`
然后"use asm";
不會放入生成的Javascript中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.