emcc 相關指令

整理這次使用到的指令

使用前要先配置
    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 的編譯器
  

發佈留言