Emscripten: модуль не найден: не удается разрешить 'env' - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь скомпилировать небольшой проект, который ссылается на библиотеку stati c (.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 не может правильно скомпилировать библиотеку.

1 Ответ

0 голосов
/ 27 апреля 2020

Вы компилируете его в чистый Wasm, но код C ++ содержит функции без эквивалента Wasm; они должны быть заменены JavaScript эквивалентами и «импортированы» в Wasm.

Обычно это делает Emscripten, но вы советуете не делать этого, когда указываете, что хотите автономный файл Wasm.

...