emscripten(emsdk),rust,golang,微软那个c#的Blazor都不错
- 既然主要目的是c++算法移植,首选emsdk。
emsdk自成体系,所以没有源码的库无法使用
- 怎么与js双向交互?这个是基础应该很容易
- 调用js:EM_ASM,EM_JS,emscripten_run_script,emscripten::val::global(“alert”)(“hi”)
- 导出js函数:bind和-s EXPORTED_FUNCTIONS=”[‘_main’,’lerp’]” ``` // quick_example.cpp #include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("lerp", &lerp);
} ``` 2. 是否支持任意平台编译和调用系统库,第三方库? 不支持 3. 能否调用并行指令neon,sse? 支持部分 4. 能否支持显卡编程cuda,opengl,d3d,内联汇编? 不支持 5. opencv.js 和 tf.js 是怎么使用webassembly技术的?emsdk直接编译 6. WASM是怎样的二进制文件技术? 7. 怎么传递二进制byte数据?直接使用指针与js的array对应。
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
git pull
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
#编译,然后新建html加载main.js
emcc -o main.js -std=c++11 --bind main.cpp lib.cpp