我正在尝试使用emscripten将简单的HelloWorld Prgramm从C ++编译为Javascript。 当我包含一个调用例如调用的主函数时,它工作正常。多功能。 这是我的代码(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, 见常见问题)
我知道'EXPORTED_FUNCTIONS'选项,它告诉我们应该在compile .js文件中包含哪些函数。 我尝试了各种不同的东西:
使用修改名称,据我所知this,名称应为'_multi_d10HelloWorldd'。我也试过没有classname和其他一些组合。
emcc -s HelloWorld.cpp -s EXPORTED_FUNCTIONS='["_multi_d10HelloWorldd"]'
使用修饰符EXPORT_ALL
emcc -s HelloWorld.cpp -s EXPORT_ALL=1
无论我做什么,这些功能都不会包含在最终的js文件中。
根据我对EMCC FAQ的理解,我需要使用EXPORTED_FUNCTIONS,以便稍后我可以调用所需的函数,例如来自JS的'sayHello'取消了相同的方法名称。 这正是我以后需要做的。
有人可以指出我可能没有想到的解决方案或任何其他可能的选项吗?
我认为错误名称是否正确?
答案 0 :(得分:3)
创建一个“extern c”块。在此块中定义要向javascript公开的函数。这些函数应该以下划线为前缀。在其中一个函数中,您可以实例化C ++类。
这与编写动态库时的方法相同,其优点是可以根据需要在本机程序中重用库。