Можно ли использовать Emscripten для переноса библиотеки C в простой старый модуль JavaScript?

#javascript #emscripten

#javascript #emscripten

Вопрос:

У меня есть библиотека C, у которой нет зависимостей, кроме libmath. Я хотел бы перенести его в модуль JavaScript с помощью Emscripten, который можно было бы использовать практически в любой среде выполнения JavaScript любым из обычных способов:

 const myModule = require('myModule'); // In Node.js
import { MyClass } from 'myModule'; // Webpack, etc.
  

… Или даже просто включить с помощью <script> тегов в браузере. Но документы Emscripten, похоже, очень сосредоточены на main функции. Я просто хотел бы перенести эту библиотеку на JavaScript, чтобы пользователи моего API могли писать свои собственные сценарии на JavaScript и использовать мой API, как если бы он никогда не был написан ни на каком языке, кроме JavaScript. Возможно ли это?

Ответ №1:

Да, вам не нужна main функция, вы можете указать, какие функции экспортировать с помощью EXPORTED_FUNCTIONS настройки. Но обратите внимание, что Emscripten теперь компилируется в WebAssembly по умолчанию, что означает, что его запуск является асинхронным. Для того, чтобы вы могли использовать только require этот модуль, как и любой другой пакет Node, вам потребуется asm.js вместо этого выводите. Возможно, установка WASM=0 параметра для Emscripten будет работать, в противном случае может потребоваться какой-либо другой процесс.