Я пытаюсь скомпилировать простой 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.
Я пробовал разные вещи:
Используя название искалеченности, насколько я понял этот имя должно быть _multi_d10HelloWorldd. Я также пробовал без имени класса и некоторых других комбинаций.
emcc -s HelloWorld.cpp -s EXPORTED_FUNCTIONS='["_multi_d10HelloWorldd"]'
Использование модификатора EXPORT_ALL
emcc -s HelloWorld.cpp -s EXPORT_ALL=1
Что бы я ни делал, функции не будут включены в окончательный файл js.
Из того, что я понимаю из EMCC FAQ Мне нужно использовать EXPORTED_FUNCTIONS, чтобы позже я мог вызвать нужную функцию, например, ‘sayHello’ из JS, использующего то же имя метода.
И это именно то, что мне нужно сделать позже.
Может ли кто-нибудь указать мне решение или любой другой возможный вариант, о котором я, возможно, не подумал?
Правильное ли я искаженное имя?
Создайте блок «extern c». Внутри этого блока определите функции, которые вы хотите представить в JavaScript. Эти функции должны начинаться с подчеркивания. Внутри одной из этих функций вы можете создать экземпляр своего класса C ++.
Это тот же подход, который используется при написании динамической библиотеки, который имеет то преимущество, что вы можете повторно использовать свою библиотеку в нативной программе, если пожелаете.
Других решений пока нет …