整理這次使用到的指令
使用前要先配置
cd ~/emsdk
./emsdk install latest
./emsdk activate latest
source ~/emsdk/emsdk_env.sh
緊接著不帶任何前綴的就是要編譯的檔案 ex. emcc quanto.c -o quanto.js
#幫助文件
emcc --help
#emcc版本
emcc --version
#不優化(預設,debug用)
-O0
#優化編譯
-O1
第一階優化,值得注意的是會將exception 相關的部分disable (-s ALIASING_FUNCTION_POINTERS=1)
可以藉由使用下列指令打開 -s ALIASING_FUNCTION_POINTERS=0
-O2
多了javascript 的優化(產品推薦使用)
-O3
犧牲性能,減少檔案大小(產品推薦使用)
-Os
犧牲更多性能,減少更多檔案大小
-Oz
犧牲更更多性能,減少更更多檔案大小
# -s 參數
-s WASM=0
生成asm.js
-s WASM=1
生成.wasm格式(預設)
-s WASM=2
兩個都生成
-s INITIAL_MEMORY=33554432
預設記憶體大小 = 32 * 1024 * 1024 bytes =32 MB
-s MAXIMUM_MEMORY=16777216
最大記憶體大小(不一定要設定)
-s ALLOW_MEMORY_GROWTH=1/0
0:不允許記憶體變大(預設)
1:允許記憶體變大
-s EXPORTED_FUNCTIONS
將會導出的function name,前面會加個底線 (自己寫的,或者C/ C++ 內建的)
malloc / free 是為了js 可以配置記憶體
-s EXPORTED_RUNTIME_METHODS
js 上可以使用的 emcc 提供的function (內建的)
ccall:js拿來呼叫 c裡面的函數,需要配置 returnTypes 跟 argTypes
cwrap:同上,但是可以包裝成js function
UTF8ToString:將指標轉js 的字串
類似的還有很多 參考:https://emscripten.org/docs/api_reference/preamble.js.html
--bind
-std=c++11
這是在寫C++時會需要添加的,否則預設是C 的編譯器