Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用WASM Micro Runtime作为运行时,遇到文件不存在的问题 #5876

Open
sjrrr13 opened this issue Jan 15, 2025 · 0 comments
Open

Comments

@sjrrr13
Copy link

sjrrr13 commented Jan 15, 2025

我使用emcc将基于NCNN框架的Resnet18代码编译成wasm文件,该代码从一个文件(dog.jpg)中读取输入并进行分类。在执行该文件时,我希望用WAMR(WASM Micro Runtime,但显示找不到该文件。我尝试了以下方法传递文件路径:

  1. 使用--preload-file
### 编译命令,指定--preload-file参数
emcc -g -s STANDALONE_WASM=1 \
    -o build/resnet.wasm resnet_nocv.cpp \
    -s FORCE_FILESYSTEM=1 \
    -s INITIAL_MEMORY=256MB \
    -Incnn/include/ncnn \
    -I. \
    -L ncnn/lib -lncnn \
    --preload-file {ABSOLUTE_PATH} 

### 执行命令
iwasm resnet.wasm

显示找不到文件dog.jpg
2. 不使用--preload-file参数,而是使用WAMR的命令行参数:

### 编译命令
emcc -g -s STANDALONE_WASM=1 \
    -o build/resnet.wasm resnet_nocv.cpp \
    -s FORCE_FILESYSTEM=1 \
    -s INITIAL_MEMORY=256MB \
    -Incnn/include/ncnn \
    -I. \
    -L ncnn/lib -lncnn

### 执行命令,指定--dir参数
iwasm --dir={ABSOLUTE_PATH} resnet.wasm

显示找不到文件dog.jpg
3. 同时使用--preload-file--dir参数:

### 编译命令,指定--preload-file参数
emcc -g -s STANDALONE_WASM=1 \
    -o build/resnet.wasm resnet_nocv.cpp \
    -s FORCE_FILESYSTEM=1 \
    -s INITIAL_MEMORY=256MB \
    -Incnn/include/ncnn \
    -I. \
    -L ncnn/lib -lncnn \
    --preload-file {ABSOLUTE_PATH} 

### 执行命令,指定--dir参数
iwasm --dir={ABSOLUTE_PATH} resnet.wasm

依然显示找不到文件dog.jpg
经过我的测试,找不到文件的内容可能是因为emcc的编译结果与WASI不兼容(WAMR默认使用WASI编译)。当我使用WASI编译一个测试文件读取的wasm应用时,使用--dir参数可以正确地找到并读取文件。但是NCNN框架使用了emscripten thread等特性,必须使用emcc进行编译,所以我想知道能否有方法让我可以在使用WAMR执行基于emcc编译的NCNN框架代码时正确读取文件dog.jpg?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant