Emscripten:找不到模块:无法解析“ env”

时间:2020-04-13 17:27:12

标签: c++ webassembly emscripten

我正在尝试编译一个小项目,该项目引用.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 Worldadd(x, y)函数示例),这将很好地工作。

有人遇到这个问题吗?

我假设我正在运行的emcc命令无法正确编译库。

1 个答案:

答案 0 :(得分:0)

您正在将其编译为纯Wasm,但是C ++代码包含不具有Wasm等效项的函数。它们必须替换为JavaScript等效项,然后“导入”到Wasm中。

这通常由Emscripten完成,但是当您指定要使用独立 Wasm文件时,您告诉它不要这样做。