C ++ искажающее имя для использования в Emscripten

Я пытаюсь скомпилировать простой HelloWorld Prgramm из C ++ в Javascript, используя emscripten.
Это прекрасно работает, когда я включаю основную функцию, вызов которой, например, мульти функция.
Вот мой код (HelloWorld.cpp).

#include <stdio.h>

class HelloWorld {
public: void sayHello() {
printf("Hello World Klasse! %f", multi(7));
}

public: double multi(double x){
return x * x;
}
};

Однако, если я не включаю основную функцию, компиляция emcc всегда выдает

ОШИБКА root: нет функций для обработки. Убедитесь, что вы предотвратили LLVM
от устранения их как мертвых (при необходимости используйте EXPORTED_FUNCTIONS,
смотрите FAQ)

Я знаю об опции EXPORTED_FUNCTIONS, которая сообщает, какие функции должны быть включены в файл компиляции .js.
Я пробовал разные вещи:

  1. Используя название искалеченности, насколько я понял этот имя должно быть _multi_d10HelloWorldd. Я также пробовал без имени класса и некоторых других комбинаций.

    emcc -s HelloWorld.cpp -s EXPORTED_FUNCTIONS='["_multi_d10HelloWorldd"]'
    
  2. Использование модификатора EXPORT_ALL

    emcc -s HelloWorld.cpp -s EXPORT_ALL=1
    

Что бы я ни делал, функции не будут включены в окончательный файл js.

Из того, что я понимаю из EMCC FAQ Мне нужно использовать EXPORTED_FUNCTIONS, чтобы позже я мог вызвать нужную функцию, например, ‘sayHello’ из JS, использующего то же имя метода.
И это именно то, что мне нужно сделать позже.

Может ли кто-нибудь указать мне решение или любой другой возможный вариант, о котором я, возможно, не подумал?

Правильное ли я искаженное имя?

1

Решение

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

Это тот же подход, который используется при написании динамической библиотеки, который имеет то преимущество, что вы можете повторно использовать свою библиотеку в нативной программе, если пожелаете.

3

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

Других решений пока нет …

По вопросам рекламы [email protected]