我正在尝试为 WebAssembly 编译 OpenBLAS。 我有一个 wasm/matrix.c 文件和从 github 下载的 OpenBLAS-0.3.26-x64-64 文件夹。
// wasm/matMul.c
#include "../OpenBLAS/include/cblas.h"
#include "emscripten.h"
#include <stdlib.h>
int result[2];
EMSCRIPTEN_KEEPALIVE
void matMul(double *m1, double *m2, int m, int n, int k)
{
size_t size = m * k * sizeof(double);
double *m3 = (double *)malloc(size);
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, k, n, 1.0, m1, n, m2, k, 0, m3, k);
result[0] = (int)m3;
result[1] = size;
}
我尝试了
emcc -IOpenBLAS/include -LOpenBLAS/lib wasm/matMul.c -o matrix.js -lopenblas
,但它给出了以下警告和错误:
wasm-ld: warning:
OpenBLAS/lib\libopenblas.a: archive member
'lapacke_make_complex_double.o' is neither Wasm object file nor LLVM bitcode
wasm-ld: error:
C:\msys64\tmp\emscripten_temp_zbcdvpw2\matMul_0.o: undefined symbol: cblas_dgemm
您可以尝试“tiny_wasm_runtime”而不是 emscripten。它的功能并不丰富,但更易于使用。对于 C 库来说它应该可以正常工作。
https://github.com/twiddlingbits/tiny-wasm-runtime
npm 安装tiny-wasm-runtime