Почему emscripten не скомпилирует мои функции? - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь скомпилировать некоторый код на C ++ в двоичный файл wasm с включенными функциями.Однако, хотя я не получаю никаких ошибок компиляции или каких-либо других предупреждений во время компиляции, файлы, сгенерированные emscripten, не включают функции, которые я экспортировал с помощью "-s EXPORTED_FUNCTIONS = ['....']"

Вот файл с функциями, которые я хочу экспортировать: https://pastebin.com/B5w1R4BC

Вот команда компиляции, которую я использую:

em++ -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 \
-Igameoflife/include -Os -DNDEBUG \
-s EXPORTED_FUNCTIONS="['_GOL_Instance_new', '_GOL_Instance_destroy', '_GOL_Init', '_GOL_Step', '_GOL_get_values']" \
-o gol.js gameoflife/src/cellmap.cpp bridge.cpp

, которая выполняется без проблем.

Однако, когда я импортирую «gol.js» в javascript, объект Module не имеет доступа ни к одной из функций, которые я пытаюсь включить (я жду, пока модуль инициализируется, прежде чем вызывать эти функции).

TypeError: Module._GOL_Instance_new is not a function

Почему я не могу получить доступ к этим функциям через wasm?

1 Ответ

0 голосов
/ 12 октября 2018

Вероятно, они искажены вашим компилятором C ++.Объявите их как extern "C", чтобы избежать этого:

extern "C"
GOL_Instance *
GOL_Instance_new() {
...
...