我正在尝试编译一个小项目,该项目引用.a
中的静态库(/usr/local/lib
)和.h
中的头文件(/usr/local/include/test
)到独立 wasm文件。以下代码运行正常,没有编译错误。
main.cpp
#include <iostream>
#include "libtest/libtest.h"
int main(int argc, char *argv[]) {
LibTest Test;
std::cout << Test.version() << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(test_project)
set(CMAKE_CXX_STANDARD 14)
include_directories(/usr/local/include)
link_directories(/usr/local/lib)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} test)
但是,当我使用以下命令编译为wasm
时:
emcc main.cpp -I/usr/local/include -Os -s WASM=1 -s SIDE_MODULE=1 -o main.wasm
将Module not found: Can't resolve 'env'
文件导入客户端应用程序时出现错误:wasm
。
这是我的导入方式:
const Component = dynamic({
loader: async () => {
const module = await import("../../main.wasm");
},
ssr: false,
});
注意::如果删除导入的库并执行其他任何操作(例如Hello World
或add(x, y)
函数示例),这将很好地工作。
有人遇到这个问题吗?
我假设我正在运行的emcc
命令无法正确编译库。
答案 0 :(得分:0)
您正在将其编译为纯Wasm,但是C ++代码包含不具有Wasm等效项的函数。它们必须替换为JavaScript等效项,然后“导入”到Wasm中。
这通常由Emscripten完成,但是当您指定要使用独立 Wasm文件时,您告诉它不要这样做。