javascript — веб-сборка: использование emscripten с библиотекой c ++

Я планирую использовать библиотеку c ++ для веб-приложения, и веб-сборка показалась мне хорошим инструментом для этого. Я использую emscripten для его компиляции.

Я получил исходный код этой библиотеки c ++ с открытым исходным кодом и сделал его с помощью Эммаке сделать а также Эммаке сделать установку

После этих двух звонков у меня были библиотеки .a в моем /usr/local/<name of open source>/lib а также заголовочные файлы в моем /usr/local/<name of open source>/include

У меня также был пример кода cpp, который использует эту библиотеку с открытым исходным кодом.

Вопрос: как мне создать html-файл для этого cpp-файла?
Имя такого файла — «test.cpp», и я попробовал эту команду, но она вызывает много «неразрешенных символов»

em++ -I/usr/local/<name of open source>/include -L/usr/local/<name of open source>/lib test.cpp -s WASM=1 -o final.html

Затем я вызвал emrun для запуска веб-сервера на моем локальном компьютере, но final.html не отображал то, что ожидал.

Не могли бы вы мне помочь?

Нерешенные символьные предупреждения в консоли

0

Решение

Похоже, что ваша библиотека может иметь зависимости, которые не встречаются (неразрешенные символы). Сборка emscripten является кросс-сборкой, то есть она не может использовать ваши установленные системные библиотеки; вместо этого вы должны построить все зависимости с помощью компилятора emscripten. Emscripten ведет себя неудачно, так как неразрешенные символы являются предупреждениями (другие компоновщики считают их ошибками), но ваша программа вряд ли будет работать, если они у вас есть.

0

Другие решения

Предупреждения (на самом деле, ошибки) показывают, что вы не скомпилировали cpp-файлы включенной библиотеки через emscripten. Помимо файла test.cpp, вам нужно будет предоставить каждый файл, который требуется вашему проекту, команде em ++.
Читать Вот для получения дополнительной информации об этом.

Теперь перейдем к другой части вашего вопроса, emscripten создаст функцию JS только для тех функций C ++, которые вы «выставляете». (Очевидно, что функции, вызываемые этими открытыми функциями, также будут скомпилированы, остальные будут удалены).

Небольшой учебник по достижению этого можно найти Вот

Как только ваши функции представлены, вы вызываете их из своего собственного кода JS (пример: связывание их с событиями JS)

0

Emscripten не рассматривает неразрешенные символы как ошибки компиляции по разным причинам.

При компиляции вашего проекта вам также необходимо связать сгенерированный .a библиотека.
-I а также -L Параметры, которые вы использовали, указывают, где искать библиотеки, которые вы хотите связать с вашей программой, но не указывает, какие библиотеки вы хотите связать.

Вам нужно добавить опцию -l<name of your library> в вашей команде компиляции, чтобы указать, что вы хотите, чтобы библиотека была связана с вашей программой.

0